我正在尝试建立一个线性程序,其中目标函数为决策变量中的max
增加额外权重乘以它们各自的系数。
考虑到这一点,有没有办法在线性程序的目标函数中使用min
或max
运算符?
示例:
Minimize
(c1 * x1) + (c2 * x2) + (c3 * x3) + (c4 * max(c1*x1, c2*x2, c3*x3))
subject to
#some arbitrary integer constraints:
x1 >= ...
x1 + 2*x2 <= ...
x3 >= ...
x1 + x3 == ...
请注意,(c4 * max(c1*x1, c2*x2, c3*x3))
是我关注的“额外权重”一词。我们让c4
表示“额外权重”系数。另请注意,此特定示例中x1
,x2
和x3
整数。
我认为上述内容可能超出了线性编程提供的范围。但是,也许有办法将其破解/重新格式化为有效的线性程序?
如果这个问题完全超出了线性规划的范围,也许有人可以推荐一种更适合这类问题的优化范例? (任何允许我避免手动枚举和检查所有可能的解决方案的东西都会有所帮助。)
答案 0 :(得分:44)
添加辅助变量,例如x4,带约束:
x4 >= c1*x1
x4 >= c2*x2
x4 >= c3*x3
Objective += c4*x4