如何使用 Python Pulp 将主题限制为四舍五入的整数
How to constrain the subject to rounded integer using Python Pulp
我正在使用 pulp 解决线性优化问题。我想把题目四舍五入到100,应该怎么做呢
我看到了这个问题的答案,但是我不知道在这种情况下如何定义整数变量 I。
谢谢!!!
考虑一个简单的 ILP,它由一个 objective 函数和变量约束组成:
min x1 + x2
s.t.
x1 + x2 >= 50
x1 >= 0
x2 >= 0
要强制执行您的条件,您可以添加 2 个变量 y
和 z
以及 2 个约束条件:
y >= x1 + x2
y == 100 * j
对于一些 j >= 1
并在 min y
中更改 objective 函数。
在代码中:
原始配方
x1 = pulp.LpVariable('x1',lowBound=0,cat=pulp.LpContinuous)
x2 = pulp.LpVariable('x2',lowBound=0,cat=pulp.LpContinuous)
prob1 = pulp.LpProblem('example1',pulp.LpMinimize)
# obj
prob1+= 5*x1 + 10*x2
# constraints
prob1+= x1 + x2 >= 50
prob1.solve()
print(pulp.value(prob1.objective)) #250
转换一个
y = pulp.LpVariable('y',lowBound=0, cat=pulp.LpContinuous)
z = pulp.LpVariable('z',lowBound=1, cat=pulp.LpInteger)
prob2 = pulp.LpProblem('example2',pulp.LpMinimize)
# obj
prob2+= y
# constraints
prob2+= y >= 5*x1 + 10*x2
prob2+= y == 100 * z
prob2+= x1 + x2 >= 50
prob2.solve()
print(pulp.value(prob2.objective)) #300
我正在使用 pulp 解决线性优化问题。我想把题目四舍五入到100,应该怎么做呢
我看到了这个问题的答案,但是我不知道在这种情况下如何定义整数变量 I。
谢谢!!!
考虑一个简单的 ILP,它由一个 objective 函数和变量约束组成:
min x1 + x2
s.t.
x1 + x2 >= 50
x1 >= 0
x2 >= 0
要强制执行您的条件,您可以添加 2 个变量 y
和 z
以及 2 个约束条件:
y >= x1 + x2
y == 100 * j
对于一些j >= 1
并在 min y
中更改 objective 函数。
在代码中:
原始配方
x1 = pulp.LpVariable('x1',lowBound=0,cat=pulp.LpContinuous)
x2 = pulp.LpVariable('x2',lowBound=0,cat=pulp.LpContinuous)
prob1 = pulp.LpProblem('example1',pulp.LpMinimize)
# obj
prob1+= 5*x1 + 10*x2
# constraints
prob1+= x1 + x2 >= 50
prob1.solve()
print(pulp.value(prob1.objective)) #250
转换一个
y = pulp.LpVariable('y',lowBound=0, cat=pulp.LpContinuous)
z = pulp.LpVariable('z',lowBound=1, cat=pulp.LpInteger)
prob2 = pulp.LpProblem('example2',pulp.LpMinimize)
# obj
prob2+= y
# constraints
prob2+= y >= 5*x1 + 10*x2
prob2+= y == 100 * z
prob2+= x1 + x2 >= 50
prob2.solve()
print(pulp.value(prob2.objective)) #300