我可以在 ZIMPL 中将函数用作 min(y,0) 而 y 是一个变量吗?
Can I use functions as min(y,0) in ZIMPL with y being a variable?
我正在使用 SCIP 和 ZIMPL 来解决我想 "punish" 变量的解决方案的优化问题x < k,其中 k 是一个参数。
我不想排除所有属于这种情况的解决方案。因此,我引入了变量 y= x-k 并想为我的 objective 值添加一个惩罚项,但前提是 y 为负,因为如果 x>k,我不想惩罚解决方案。
添加 -(min(y,0))
应该可以解决问题,但我感觉 ZIMPL 中的所有函数和操作,例如 min
- 函数(列出在 Table ZIMPL 文档第 7 页的 Table 2 和 3 中)只能应用于参数。
有人可以证实吗?如果是的话,有没有人知道我如何实现一种惩罚项,它只惩罚 ZIMPL 中变量 y 的负数部分?
PS:对于误导性标签#scip,我们深表歉意,因为它是一个明显的 ZIMPL 相关问题。但不幸的是,没有现有的标签#zimpl。
是的,您不能将这种运算符与变量一起使用(它不再是 MILP)。但是,为什么不像 y1 - y2 = x-k
那样用 y1 >= 0
和 y2 >= 0
建模,然后将 y2
放入 objective 函数中呢?
我正在使用 SCIP 和 ZIMPL 来解决我想 "punish" 变量的解决方案的优化问题x < k,其中 k 是一个参数。 我不想排除所有属于这种情况的解决方案。因此,我引入了变量 y= x-k 并想为我的 objective 值添加一个惩罚项,但前提是 y 为负,因为如果 x>k,我不想惩罚解决方案。
添加 -(min(y,0))
应该可以解决问题,但我感觉 ZIMPL 中的所有函数和操作,例如 min
- 函数(列出在 Table ZIMPL 文档第 7 页的 Table 2 和 3 中)只能应用于参数。
有人可以证实吗?如果是的话,有没有人知道我如何实现一种惩罚项,它只惩罚 ZIMPL 中变量 y 的负数部分?
PS:对于误导性标签#scip,我们深表歉意,因为它是一个明显的 ZIMPL 相关问题。但不幸的是,没有现有的标签#zimpl。
是的,您不能将这种运算符与变量一起使用(它不再是 MILP)。但是,为什么不像 y1 - y2 = x-k
那样用 y1 >= 0
和 y2 >= 0
建模,然后将 y2
放入 objective 函数中呢?