public class TestClassTest
{
@Test
public void test10Vars() {
final Slsqp slsqp = new Slsqp.SlsqpBuilder()
.withObjectiveFunction(new RosenBrock())
.build();
final int length = 10;
final double[] x = new double[length];
for (int i = 0; i < length; i++)
{
x[i] = i;
}
final long now = System.nanoTime();
OptimizeResult result = slsqp.minimize(x);
do {
result = slsqp.minimize(x);
} while (!result.success());
final long after = System.nanoTime();
final long diff = after - now;
System.out.println("10vars diff: " + diff);
System.out.println("succes: " + result.success());
System.out.println("exitMode: " + result.exitMode());
System.out.println("numiters " + result.numIters());
final double[] resultVec = result.resultVec();
for (int i = 0; i < resultVec.length; i++)
{
System.out.println(resultVec[i]);
}
}
@Test
public void test50Vars() {
final Slsqp slsqp = new Slsqp.SlsqpBuilder()
.withObjectiveFunction(new RosenBrock())
.build();
final int length = 50;
final double[] x = new double[length];
for (int i = 0; i < length; i++)
{
x[i] = i;
}
final long now = System.nanoTime();
OptimizeResult result = slsqp.minimize(x);
do {
result = slsqp.minimize(x);
} while (!result.success());
final long after = System.nanoTime();
final long diff = after - now;
System.out.println("50vars diff: " + diff );
System.out.println("succes: " + result.success());
System.out.println("exitMode: " + result.exitMode());
System.out.println("numiters " + result.numIters());
final double[] resultVec = result.resultVec();
for (int i = 0; i < resultVec.length; i++)
{
System.out.println(resultVec[i]);
}
}
@Test
public void test100Vars() {
final Slsqp slsqp = new Slsqp.SlsqpBuilder()
.withObjectiveFunction(new RosenBrock())
.build();
final int length = 100;
final double[] x = new double[length];
for (int i = 0; i < length; i++)
{
x[i] = i;
}
final long now = System.nanoTime();
OptimizeResult result = slsqp.minimize(x);
do {
result = slsqp.minimize(x);
} while (!result.success());
final long after = System.nanoTime();
final long diff = after - now;
System.out.println("100vars diff: " + diff);
System.out.println("succes: " + result.success());
System.out.println("exitMode: " + result.exitMode());
System.out.println("numiters " + result.numIters());
final double[] resultVec = result.resultVec();
for (int i = 0; i < resultVec.length; i++)
{
System.out.println(resultVec[i]);
}
}
@Test
public void test500Vars() {
final Slsqp slsqp = new Slsqp.SlsqpBuilder()
.withObjectiveFunction(new RosenBrock())
.build();
final int length = 500;
final double[] x = new double[length];
for (int i = 0; i < length; i++)
{
x[i] = i;
}
final long now = System.nanoTime();
OptimizeResult result = slsqp.minimize(x);
do {
result = slsqp.minimize(x);
} while (!result.success());
final long after = System.nanoTime();
final long diff = after - now;
System.out.println("500vars diff: " + diff);
System.out.println("succes: " + result.success());
System.out.println("exitMode: " + result.exitMode());
System.out.println("numiters " + result.numIters());
final double[] resultVec = result.resultVec();
for (int i = 0; i < resultVec.length; i++)
{
System.out.println(resultVec[i]);
}
}
@Test
public void test1000Vars() {
final Slsqp slsqp = new Slsqp.SlsqpBuilder()
.withObjectiveFunction(new RosenBrock())
.build();
final int length = 1000;
final double[] x = new double[length];
for (int i = 0; i < length; i++)
{
x[i] = i;
}
final long now = System.nanoTime();
OptimizeResult result = slsqp.minimize(x);
do {
result = slsqp.minimize(x);
} while (!result.success());
final long after = System.nanoTime();
final long diff = after - now;
System.out.println("1000vars diff: " + diff);
System.out.println("succes: " + result.success());
System.out.println("exitMode: " + result.exitMode());
System.out.println("numiters " + result.numIters());
final double[] resultVec = result.resultVec();
for (int i = 0; i < resultVec.length; i++)
{
System.out.println(resultVec[i]);
}
}
public static final class RosenBrock implements Vector2ScalarFunc
{
@Override
public double apply(double[] x, double... arg)
{
double val = 0;
for (int i = 0; i < x.length - 1; i++) {
val += 100 * Math.pow((x[i + 1] - Math.pow(x[i], 2)), 2) + Math.pow((1 - x[i]), 2);
}
return val;
}
}
}
#!/usr/bin/python3
import time
from scipy.optimize import minimize
def rosenbrock(x):
val = 0
for i in range(0, len(x) - 1):
val += 100 * ((x[i + 1] - x[i] ** 2) ** 2) + (1 - x[i]) ** 2
return val
if __name__ == "__main__":
x = []
length = 10
for i in range(0, length):
x.append(i)
start = time.time_ns()
while True:
result = minimize(rosenbrock, x, method='SLSQP')
if result.success or result.nit > 100:
break
end = time.time_ns()
diff = (end - start)
print("10 vars time: {}".format(diff))
print(result.x)
print(result.success)
print(result.nit)
print(result.message)
x = []
length = 50
for i in range(0, length):
x.append(i)
start = time.time_ns()
while True:
result = minimize(rosenbrock, x, method='SLSQP')
if result.success or result.nit > 100:
break
end = time.time_ns()
diff = (end - start)
print("50 vars time: {}".format(diff))
print(result.x)
print(result.success)
print(result.nit)
print(result.message)
x = []
length = 100
for i in range(0, length):
x.append(i)
start = time.time_ns()
while True:
result = minimize(rosenbrock, x, method='SLSQP')
if result.success or result.nit > 100:
break
end = time.time_ns()
diff = (end - start)
print("100 vars time: {}".format(diff))
print(result.x)
print(result.success)
print(result.nit)
print(result.message)
x = []
length = 500
for i in range(0, length):
x.append(i)
start = time.time_ns()
while True:
result = minimize(rosenbrock, x, method='SLSQP')
if result.success or result.nit > 100:
break
end = time.time_ns()
diff = (end - start)
print("500 vars time: {}".format(diff))
print(result.x)
print(result.success)
print(result.nit)
print(result.message)
x = []
length = 1000
for i in range(0, length):
x.append(i)
start = time.time_ns()
while True:
result = minimize(rosenbrock, x, method='SLSQP')
if result.success or result.nit > 100:
break
end = time.time_ns()
diff = (end - start)
print("1000 vars time: {}".format(diff))
print(result.x)
print(result.success)
print(result.nit)
print(result.message)