外部函数的实例(Local Solver Java实现)
JAVA实现
在Java中,您必须实现LSIntExternalFunction或LSDoubleExternalFunction接口,特别是call ()方法来实现外部函数(第1步)。
然后(第2步)实例化函数并使用LSModel.createIntExternalFunction或LSModel.createDoubleExternalFunction方法将其转换为一个LSExpression表达式。
要创建LSOperator.call表达式时,可以使用通用方法LSModel.createExpression或快捷方式LSModel.call。外部函数的参数值将通过LSExternalArgumentValues公开。
你可以通过LSExpression.getExternalContext访问函数的LSExternalContext上下文信息:代码如下
import java.lang.Math;
import localsolver.*;
...
void TestExternalFunction()
{
LocalSolver ls = new LocalSolver();
LSModel m = ls.getModel();
LSExpression func = m.createDoubleExternalFunction(new LSDoubleExternalFunction() {
double call(LSExternalArgumentValues argumentValues) {
return Math.acos(argumentValues.getDoubleValue(0));
}
});
// Users of Java 8 can simplify the code above by using a lambda:
// LSExpression func = m.createDoubleExternalFunction(
// args -> Math.acos(args.getDoubleValue(0))
// );
func.getExternalContext().setLowerBound(0.0);
func.getExternalContext().setUpperBound(Math.PI);
LSExpression x = m.floatVar(-0.5, 0.5);
LSExpression y = m.floatVar(-0.5, 0.5);
m.minimize(m.call(func, m.sum(x, y)));
m.constraint(m.geq(m.sum(x, m.prod(3, y)), 0.75));
...
}
更多信息请关注local solver中国区独家代理商"无锡迅合信息科技有限公司"数学工程师(2020-2024).