使用Python

时间:2015-07-12 16:47:27

标签: python optimization scipy

我正在尝试使用optimize.linprog()和python来解决一系列方程,而不是使用单纯形法和一个画面手动执行计算。我的同事和我真的只是试图通过python自动化解决一个画面的过程,通过最大化或最小化来优化方程式系列。

此代码是http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html#scipy.optimize.linprog

处代码的修改版本

代码似乎适用于给出的示例:

import matplotlib.pyplot
from matplotlib.pyplot import *
import numpy
from numpy import *
from scipy import optimize

# Minimize: f = -x + 4y
# -3x+y<=6
# x + 2y <= 4
# y >= -3
c = [-1, 4]
A = [[-3, 1], [1, 2]]
b = [6, 4]
x_bounds = (None, None)
y_bounds = (-3, None)
res = optimize.linprog(c, A_ub=A, b_ub=b, bounds=(x_bounds, y_bounds), options={"disp": False})
print(res)

但是,当我为其他系统插入数字时,数组会显示为零。以下是我尝试过的一个不起作用的示例:

import matplotlib.pyplot
from matplotlib.pyplot import *
import numpy
from numpy import *
from scipy import optimize

# Equations
# x+y <= 40
# 6x + 12y <= 312
# 40x+120y <= 2400

# Bounds
#  x >=0
#  y >=0

# Objective Function:
# f=100x+250y

c = [100, 250]
A = [[1, 1], [6, 12],[40,120]]
b = [40, 312, 2400]
x_bounds = (0, None)
y_bounds = (0, None)
res = optimize.linprog(c, A_ub=A, b_ub=b, bounds=(x_bounds, y_bounds), options={"disp": False})
print(res)

我知道通过使用单纯形法解决第二个方程序列,并且它解决了x = 28,y = 12,s2 = 848的画面。 校验: 28 + 12 = 40

4(28)+12(120)+848=2400
6(28)+12(12)=312
100(28)+250(12)=5800

正在解决的画面是:

x      y      s1     s2     s3     z      
1      1      1      0      0      0      40
4      120    0      1      0      0      2400
6      12     0      0      1      0      312
-100   250    0      0      0      1      0

有人知道如何用python解决优化问题或表格吗?是否可以修复上面的代码?我的同事和我整个星期都在看这个。我们已经看到很多链接和片段,但没有人能够使它工作。如果你有一个工作python代码的样本,请你完整地显示它?

0 个答案:

没有答案