如何在or-tools中定义复杂的目标函数?

罗曼·卡普隆(Romain Capron)

我想知道如何使用or-tools(如果可能)定义一个复杂的目标函数。

下面的基本示例说明了如何在python中使用Or-tools解决线性问题:

solver = pywraplp.Solver('lp_pricing_problem', pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)

# Define variables with a range from 0 to 1000.
x = solver.NumVar(0, 1000, 'Variable_x')
y = solver.NumVar(0, 1000, 'Variable_y')

# Define some constraints.
solver.Add(x >= 17)
solver.Add(x <= 147)
solver.Add(y >= 61)
solver.Add(y <= 93)

# Minimize 0.5*x + 2*y
objective = solver.Objective()
objective.SetCoefficient(x, 0.5)
objective.SetCoefficient(y, 2)
objective.SetMinimization()

status = solver.Solve()

# Print the solution
if status == solver.OPTIMAL:
    print("x: {}, y: {}".format(x.solution_value(), y.solution_value())) # x: 17.0, y: 61.0 

在这个非常基本的示例中,目标函数为Minimize(0.5*x + 2*y)获得例如最小二乘法Minimize(x^2 + y^2)或变量的绝对值的语法是什么Minimize(abs(x) + y)

是否可以定义一个子函数并将其调用到目标函数中?还是我应该采取另一种方式?

提前谢谢了,

罗曼

理查德

您已使用标记了这个问题linear-programming,因此您已经可以在这里找到答案。

如果查看此页面,您将看到OR-Tools解决了线性程序以及其他一些优化问题。

因此,您提到的第一个目标函数Minimize(0.5*x + 2*y)是可解的,因为它是线性的。

您提到的第二个目标Minimize(x^2 + y^2)---无法使用OR-Tools解决,因为它是非线性的:那些平方项使它成为二次项。要解决此问题,您需要可以执行二次编程二次锥编程二次约束二次编程的工具所有这些方法都将线性规划作为子集我推荐用于解决这类问题的工具是cvxpy,它提供了强大而优雅的界面。(或者,您可以将二次方程近似为逐段线性,但会产生更多约束。)

您提到的最后一个目标,即使本身是非线性的Minimize(c*abs(x) + y) 可以解决为线性程序abs(x)为此,我们将目标重写为min( c*(t1-t2) +y)并添加约束t1,t2>=0只要c是正数且您正在使之最小化(或c为负数且正在使之最大化),此方法就起作用更长的解释在这里

您可以执行许多这样的转换,而数学程序员/操作研究人员的技能之一就是记住其中的许多转换。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Mathemathica中定义使用复杂递归关系的函数?

来自分类Dev

如何在MATLAB的全局优化工具箱中定义待优化的目标函数变量?

来自分类Dev

如何在Ansible库存文件中定义复杂变量

来自分类Dev

如何在SymPy中定义数学函数?

来自分类Dev

如何在LISP中定义LAMBDA函数?

来自分类Dev

如何在CmdletBinding()脚本中定义函数?

来自分类Dev

如何在redis \ lua中定义函数?

来自分类Dev

如何在Swift中定义全局函数?

来自分类Dev

如何在Vim中隐藏函数定义?

来自分类Dev

如何在Scala中定义全局函数?

来自分类Dev

如何在Python中定义全局函数?

来自分类Dev

如何在Scala中定义全局函数?

来自分类Dev

如何在JavaScript中定义函数?

来自分类Dev

如何在匹配块中定义函数

来自分类Dev

如何在函数中定义参数。

来自分类Dev

如何在函数中定义对象类型?

来自分类Dev

如何在python中调用定义的函数?

来自分类Dev

如何在复杂对象中组织Javascript函数

来自分类Dev

如何在VBA中动态更改复杂的xls函数的部分

来自分类Dev

如何在Maven pom.xml中定义独立目标?

来自分类Dev

如何在GNU Make中以编程方式定义目标?

来自分类Dev

如何在Groovy中为多个目标定义注释?

来自分类Dev

如何在目标C中自定义NSOutlineView?

来自分类Dev

如何在Groovy中为多个目标定义注释?

来自分类Dev

如何在目标c中为此代码创建函数

来自分类Dev

如何在pyomo中访问目标函数值?

来自分类Dev

如何在 Gurobi 中编写以下目标函数?

来自分类Dev

如何在JavaScript中的函数中定义函数?

来自分类Dev

Makefile-如何在创建其他目标的目标中定义变量?

Related 相关文章

热门标签

归档