2015-10-13 184 views
0

它已经有一段时间,因为我已经做到了这一点,所以我有点生疏,但公式是:的Python linprog最大化目标函数

max t(C)*x 
s.t. Ax <=b 

我有我的一个矩阵约束条件是( 1448x1359):

[[ 1. 1. 0. ..., 0. 0. 0.] 

..., 


[ 0. 0. 0. ..., 1. 1. 1.]] 

然后,我有我的结合b(1448x1):

[ 1. 1. 7. ..., 2. 1. 2.] 

而我的目标函数被最大化,这是一个向量(1359,1)。

现在,在其他包我的最大目标函数是841,但是使用linprog:

res = linprog(c=OBJ_N, A_ub=A, b_ub=b, options={"disp": True}) 

它成功地优化-0.0所以我不知道如果我使用Python中正确的命令,并有我的约束正确的方式?

编辑:确定这是有道理的,它试图最小化。我现在已经改写(交换c和b,并将A转为最小)。

# (max t(C)*x s.t. Ax <=b) = min t(b)*x s.t. ATy = c, y ≥ 0 
# (i): minimise number of shops no bounds 
ID = np.ones(len(w[0])) 
print(ID) 
print(ID.shape) #1359 

At = A.transpose() 

need_divest = (A.dot(ID)) - 1 
print(need_divest) 
print(need_divest.shape) #1448 

res = linprog(c=need_divest, A_eq=At, b_eq=ID, options={"disp": True}) 
print(res) 

不过,我得到“消息:‘Optimzation失败无法找到一个可行的起点。’”

+0

linprog:'最小化的线性目标函数受线性等式和不等式constraints.' - 这是否帮助? – cel

+0

你走错了路......在这里你试图解决你最初的“最小化”问题的“双重”问题。 您可以考虑下面的答案,正确说明您的原始问题。 – Mathiou

回答

1

我猜你大概minimizing代替maximizing你的目标函数。 这种尝试(插入- 在你的目标函数系数的前):然后

res = linprog(c=-OBJ_N, A_ub=A, b_ub=b, options={"disp": True}) 

你的结果应该是-841。

这工作仅仅是因为:

min(f(x))=-max(-f(x)) 
+0

非常感谢!你治好了我的长愚蠢 –

+0

没有的小时与愚蠢的事情,你只需要在线性规划小点心:) – Mathiou

+0

我不认为你可以做到这一点使用'linprog'。当你需要积分变量时,问题就困难得多,因此对这些“ILP”问题有不同的分辨率算法。看看这个,如果你想了解更多关于哪里找:http://stackoverflow.com/questions/26305704/python-mixed-integer-linear-programming – Mathiou