use of cbit.function.DynamicScalarFunction in project vcell by virtualcell.
the class AugmentedObjectiveFunctionTest method getExample1.
/**
* Insert the method's description here.
* Creation date: (5/3/2002 2:49:06 PM)
* @return opt.AugmentedObjectiveFunction
*/
public static AugmentedObjectiveFunction getExample1() {
try {
Expression scalarFn_exp = new Expression("pow(x1-2,4)+pow(x1-2*x2,2)");
Expression[] eqConstraints_exps = { new Expression("pow(x1,2)-x2") };
Expression[] ineqConstraints_exps = { new Expression("pow(x1,2)-x2") };
;
String[] ids = { "x1", "x2" };
ScalarFunction scalarFn = new DynamicScalarFunction(scalarFn_exp, ids);
VectorFunction eqConstraints = new DynamicVectorFunction(eqConstraints_exps, ids);
VectorFunction ineqConstraints = new DynamicVectorFunction(ineqConstraints_exps, ids);
AugmentedObjectiveFunction aof = new AugmentedObjectiveFunction(scalarFn, eqConstraints, ineqConstraints, 2.0, 0.1, new DefaultOptSolverCallbacks());
return aof;
} catch (ExpressionException e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
}
use of cbit.function.DynamicScalarFunction in project vcell by virtualcell.
the class OptUtils method getAugmentedObjectiveFunction.
/**
* Insert the method's description here.
* Creation date: (8/4/2005 3:26:14 PM)
* @return function.AugmentedObjectiveFunction
* @param optSpec cbit.vcell.opt.OptimizationSpec
* @param power double
* @param mu double
*/
public static AugmentedObjectiveFunction getAugmentedObjectiveFunction(OptimizationSpec optSpec, double power, double mu, OptSolverCallbacks optSolverCallbacks) throws cbit.vcell.parser.ExpressionException {
Parameter[] parameters = optSpec.getParameters();
//
// build symbol list
//
String[] origSymbols = optSpec.getParameterNames();
String[] scaledSymbols = optSpec.getScaledParameterNames();
double[] scaleFactors = optSpec.getScaleFactors();
ScalarFunction objFunction = null;
if (optSpec.getObjectiveFunction() instanceof ExplicitObjectiveFunction) {
ExplicitObjectiveFunction explicitObjectiveFunction = (ExplicitObjectiveFunction) optSpec.getObjectiveFunction();
//
// build objective function
//
objFunction = new DynamicScalarFunction(explicitObjectiveFunction.getScaledExpression(origSymbols, scaledSymbols, scaleFactors), scaledSymbols);
} else if (optSpec.getObjectiveFunction() instanceof ImplicitObjectiveFunction) {
ImplicitObjectiveFunction implicitObjectiveFunction = (ImplicitObjectiveFunction) optSpec.getObjectiveFunction();
//
// build objective function
//
objFunction = implicitObjectiveFunction.getObjectiveFunction();
} else if (optSpec.getObjectiveFunction() instanceof ExplicitFitObjectiveFunction) {
ExplicitFitObjectiveFunction explicitFitObjectiveFunction = (ExplicitFitObjectiveFunction) optSpec.getObjectiveFunction();
objFunction = explicitFitObjectiveFunction.getScalarFunction();
} else {
throw new RuntimeException("unsupported objective function type : " + optSpec.getObjectiveFunction().getClass().getName());
}
//
// build equality and inequality constraints
//
DynamicVectorFunction equalityConstraints = null;
DynamicVectorFunction inequalityConstraints = null;
Constraint[] constraints = optSpec.getConstraints();
Vector equExpList = new Vector();
Vector inequExpList = new Vector();
//
for (int i = 0; i < constraints.length; i++) {
ConstraintType type = constraints[i].getConstraintType();
if (type.equals(ConstraintType.LinearEquality) || type.equals(ConstraintType.NonlinearEquality)) {
equExpList.add(constraints[i].getExpression());
} else {
inequExpList.add(constraints[i].getExpression());
}
}
//
for (int i = 0; i < parameters.length; i++) {
if (!Double.isInfinite(parameters[i].getLowerBound())) {
inequExpList.add(new Expression("(" + parameters[i].getLowerBound() + " - " + parameters[i].getName() + ")/" + scaleFactors[i]));
}
if (!Double.isInfinite(parameters[i].getUpperBound())) {
inequExpList.add(new Expression("(" + parameters[i].getName() + " - " + parameters[i].getUpperBound() + ")/" + scaleFactors[i]));
}
}
if (equExpList.size() > 0) {
Expression[] exps = (Expression[]) org.vcell.util.BeanUtils.getArray(equExpList, Expression.class);
equalityConstraints = new DynamicVectorFunction(exps, origSymbols);
}
if (inequExpList.size() > 0) {
Expression[] exps = (Expression[]) org.vcell.util.BeanUtils.getArray(inequExpList, Expression.class);
inequalityConstraints = new DynamicVectorFunction(exps, origSymbols);
}
AugmentedObjectiveFunction augmentedObjFunc = new AugmentedObjectiveFunction(objFunction, equalityConstraints, inequalityConstraints, power, mu, optSolverCallbacks);
return augmentedObjFunc;
}
use of cbit.function.DynamicScalarFunction in project vcell by virtualcell.
the class AugmentedObjectiveFunctionTest method getExample2.
/**
* Insert the method's description here. // Root-finding example
* Creation date: (5/3/2002 2:49:06 PM)
* @return opt.AugmentedObjectiveFunction
*/
public static AugmentedObjectiveFunction getExample2() {
try {
Expression scalarFn_exp = new Expression("1");
Expression[] eqConstraints_exps = { new Expression("sin(x1+x2)-exp(x1-x2)"), new Expression("cos(x1+x2)-x1*x1*x2*x2") };
Expression[] ineqConstraints_exps = {};
String[] ids = { "x1", "x2" };
ScalarFunction scalarFn = new DynamicScalarFunction(scalarFn_exp, ids);
VectorFunction eqConstraints = new DynamicVectorFunction(eqConstraints_exps, ids);
VectorFunction ineqConstraints = new DynamicVectorFunction(ineqConstraints_exps, ids);
AugmentedObjectiveFunction aof = new AugmentedObjectiveFunction(scalarFn, eqConstraints, ineqConstraints, 2.0, 0.1, new DefaultOptSolverCallbacks());
return aof;
} catch (ExpressionException e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
}
Aggregations