python - 蟒蛇浆加罚
问题描述
目前我正在研究纸浆线性空气最小化问题。该变量X
等于该问题中数字列表的总和。如果 X 为正,则不应向目标添加任何惩罚。但是,如果X
为负数,则应将其添加到目标的 as 惩罚中。这意味着在这种情况下Penalty
应该等于-X
。
例如:
X = lpvariable('X'-1000,1000,cat='Integer')
Penalty =lpvariable('Penalty', 0,1000,cat='Integer')
prob += Penalty # Objective
prob += 10 + 11 + -2 + -4 == X
在这种情况下X=15
和Penalty=0
然而,当总和是
prob += -10+11-2-4 ==X
变量X=-5
和惩罚应该是Penalty = 5
有人可以帮我解决这个问题吗?
提前谢谢了。
解决方案
您缺少的是对Penalty
. 您几乎可以在您的问题中说出这需要什么。
你想强行Penalty
成为。>=
-X
当X
为正数时,这将不起作用 - 上的下限Penalty
已经为零,因此添加另一个正数的下限-X
没有X
任何作用。
当X
为负时,它会做你想要的:
from pulp import *
X = LpVariable('X',-1000,1000,cat='Integer')
Penalty =LpVariable('Penalty', 0,1000,cat='Integer')
prob = LpProblem ("MinimisePenaltye", LpMinimize)
prob += Penalty # Objective
prob += Penalty >= -X
prob += X == -15
prob.solve()
# Dislay the optimums of each var
for v in prob.variables ():
print (v.name, "=", v.varValue)
退货
Penalty = 15.0
X = -15.0
推荐阅读
- python - 第一次尝试时忽略输入
- sql - 对已从 Linqpad 中的数据库获取的数据运行查询(需要缓存)
- reactjs - 如何在 React js 中创建依赖项下拉菜单
- apache-kafka - 是 ISR 列表的领导者部分
- flutter - Flutter GestureDetector 的 onTapUp 并不总是被调用
- python - pymysql 为 BIT 类型返回错误的值
- airflow - 气流中的 prev_execution_date
- r - 如果元素存在于R中的列表中,则在新列中添加值
- matlab - 这里的“p”类是什么?“p”类是双倍还是单元格?
- llvm - 编译 opencl 内核时出现非法 BitCast