LocalSolver建模功能特色---约束 和目标
Constraints(约束)
约束是一种标记,它放置在表达式上强制让其变为true(表达式值等于1)。在LocalSolver中,可以约束具有布尔值(0、1)的任何变量或中间表达式。因此,“所有”涉及到关系运算符(<,<=,>,>=,=,=,!=)的表达式,以及逻辑操作符 “和”(&&)或(| |)、xor或iif(Immediate IF)都可以被约束,不限于问题类型。特别是,LocalSolver不仅限于线性约束,而且还可以处理高度非线性的模型。
要在Local Solver建模器(modeler)中将表达式标记为约束,只需使用关键字constraint作为其前缀。例如:
LSP:
// These two formulations are equivalent这两个公式是等价的
constraint knapsackWeight <= 102;
weightCst <- knaspackWeight <= 102;
constraint weightCst;
PYTHON语言:
# These two formulations are equivalent这两个公式是等价的
model.constraint(knapsackWeight <= 102)
weightCst = knaspackWeight <= 102
model.constraint(weightCst)
C++语言
// These two formulations are equivalent这两个公式是等价的
model.constraint(knapsackWeight <= 102);
weightCst = knaspackWeight <= 102;
model.constraint(weightCst);
C#语言
// These two formulations are equivalent这两个公式是等价的
model.Constraint(knapsackWeight <= 102);
weightCst = knaspackWeight <= 102;
model.Constraint(weightCst);
Java语言
// These two formulations are equivalent这两个公式是等价的
model.constraint(knapsackWeight <= 102);
weightCst = model.leq(knaspackWeight, 102);
model.constraint(weightCst);
运筹学中的一个好做法是只将严格必要的需求建模为约束。如果在某些特殊情况下某个需求可能被违反,那么最好将其构建为一个主要目标,以便“柔和地”满足(目标规划)。LocalSolver提供了一个功能,使这一点很容易做到:那就是:字典序目标(lexicographic objectives)。更多问题请联系LocalSolver中国区独家代理商无锡迅合信息科技有限公司开发人员。
Objectives(目标)
必须使用关键字minimize或maximize至少定义一个目标。任何表达式都可以用作目标。如果定义了多个目标,它们将被解释为一个词典序目标函数。词典排序是由目标的声明顺序归纳出来的。通过这种方式,表达式经常出现在数学编程模型中,如
maximize 10000 revenues - 100 resources + desiderata;
为了先实现收入(revenues)最大化,再将资源(resources)最小化,最终最大化desiderata,原先操作比较麻烦,现在您可以直接写:
LSP:
maximize revenues;
minimize resources;
maximize desiderata;
PYTHON语言
model.maximize(revenues)
model.minimize(resources)
model.maximize(desiderata)
C++语言
model.maximize(revenues);
model.minimize(resources);
model.maximize(desiderata);
C#语言
model.Maximize(revenues);
model.Minimize(resources);
model.Maximize(desiderata);
JAVA语言
model.maximize(revenues);
model.minimize(resources);
model.maximize(desiderata);
未完待续。。。。【Local Solver数学优化器讲解系列 】