我想问您关于Linear程序进行优化的问题。
我有一个目标函数,约束函数如下,
变量(x1
,x2
,x3
,x4
,x5
和x6
)是产品的数量,产品数量现在必须为固定数量。
这个问题的目的是优化产品数量。
目标函数(c.T * [x1, x2, x3, x4, x5, x6]
)
[[c11, c12, c13, c14, c15 c16],
[c21, c22, c23, c24, c25, c26],
X [x1, x2, x3, x4, x5, x6]
[c31, c32, c33, c34, c35, c36],
[c41, c42, c43, c44, c45, c45]]
我要优化的结果如下:
c11*x1 + c12*x2 + c13*x3 + c14*x4 + c15*x5 + c16*x6 +
c21*x1 + c22*x2 + c23*x3 + c24*x4 + c25*x5 + c26*x6 +
c31*x1 + c32*x2 + c33*x3 + c34*x4 + c35*x5 + c36*x6 +
c41*x1 + c42*x2 + c43*x3 + c44*x4 + c45*x5 + c46*x6 = optimized value
约束函数
约束_1
5500000*x1+2500000*x2+825000*x3+5500000*x4+5500000*x5+5500000*x6 <= 800000000
约束_2
x1 <= 10
x2 <= 10
x3 <= 10
x4 <= 10
x5 <= 10
x6 <= 10
我遇到的问题是“ Cs(c1,1 ~ c4,5)
的目标功能”中的问题。
如果对象函数类似于3 * x1 + 2 * x2 + 3 * x3 + 4 * x4 + 5 * x5 + 6 * x6
,则将更容易并通过以下代码解决:
c = np.array([3, 2, 3, 4, 5, 6])
A = np.array([[5500000, 2500000, 825000, 5500000, 5500000, 5500000], [1,0,0,0,0,0], [0,1,0,0,0,0], [0,0,1,0,0,0], [0,0,0,1,0,0], [0,0,0,0,1,0], [0,0,0,0,0,1]])
b = np.array([800000000, 10, 10, 10, 10, 10, 10])
c = matrix(c, tc='d')
G = matrix(A, tc='d')
h = matrix(b, tc='d')
status, x = glpk.ilp(c, g, h, I=set([0,1,2,3,4,5]))
请帮助解决线性规划问题。
答案 0 :(得分:0)
以下内容仅在安装纸浆的情况下有效。这是我经常使用的LP解决程序库。如果您未将c11到c45定义为整数或浮点数,则以下可能不起作用。您还需要将c值初始化为LP变量。
from pulp import *
# Let's program know that you want to maximize subject to constraints
prob = LpProblem("LP problem", LpMaximize)
# initialize variables
x1=LpVariable("x1",lowBound=0)
x2=LpVariable("x2",lowBound=0)
x3=LpVariable("x3",lowBound=0)
x4=LpVariable("x4",lowBound=0)
x5=LpVariable("x5",lowBound=0)
x6=LpVariable("x6",lowBound=0)
# objective function must be "added" to prob BEFORE constraints.
prob += c11*x1 + c12*x2 + c13*x3 + c14*x4 + c15*x5 + c16*x6 + c21*x1 + c22*x2 +
c23*x3 + c24*x4 + c25*x5 + c26*x6 + c31*x1 + c32*x2 + c33*x3 + c34*x4 + c35*x5+
c36*x6 + c41*x1 + c42*x2 + c43*x3 + c44*x4 + c45*x5 + c46*x6
# constraints
prob += 5500000*x1+2500000*x2+825000*x3+5500000*x4+5500000*x5+5500000*x6 <=
800000000
prob += x1 <= 10
prob += x2 <= 10
prob += x3 <= 10
prob += x4 <= 10
prob += x5 <= 10
prob += x6 <= 10
现在运行以下内容:
status = prob.solve()
LpStatus[status]
最后运行以下内容:
value(x1), value(x2), value(x3), value(x4), value(x5), value(x6)
value(prob.objective)
让我知道您是否遇到任何问题并发表评论。