赞
踩
上篇文章:线性规划
文章摘要:整数规划的Python实现。
参考书籍:数学建模算法与应用(第3版)司守奎 孙玺菁。
PS:只涉及了具体实现并不涉及底层理论。学习底层理论以及底层理论实现:可以参考1.最优化模型与算法——基于Python实现 渐令 粱锡军2.算法导论(原书第3版)Thomas H.Cormen Charles E.Leiserson、Ronald L.Rivest Clifford Stein
文章声明:如有发现错误,还望批评指正。
目标函数:
max
o
r
min
y
=
∑
i
=
1
n
a
i
x
i
\max\;or\;\min\; y=\sum\limits_{i=1}^{n}a_ix_i
maxorminy=i=1∑naixi
约束条件:
∑
j
=
1
n
a
i
j
x
j
≤
o
r
=
o
r
≥
b
i
,
i
=
1
,
2
,
…
,
m
\sum\limits_{j=1}^{n}a_{ij}x_{j}\leq or = or \geq b_i,i=1,2,\dots,m
j=1∑naijxj≤or=or≥bi,i=1,2,…,m
x
j
≥
0
,
j
=
1
,
2
,
…
,
n
x_j\geq0,j=1,2,\dots,n
xj≥0,j=1,2,…,n
x
j
,
j
=
1
,
2
,
…
,
n
x_j,j=1,2,\dots ,n
xj,j=1,2,…,n中部分或者全部取整
参考书籍例2.6
目标函数:
min
z
=
∑
i
=
1
4
∑
j
=
1
5
c
i
j
x
i
j
\min z=\sum\limits_{i=1}^4\sum\limits_{j=1}^{5}c_{ij}x_{ij}
minz=i=1∑4j=1∑5cijxij
约束条件:
∑
i
=
1
4
x
i
j
=
1
,
j
=
1
,
2
,
…
,
5
\sum\limits_{i=1}^4x_{ij}=1,j=1,2,\dots,5
i=1∑4xij=1,j=1,2,…,5
∑
j
=
1
5
x
i
j
≤
2
,
i
=
1
,
2
,
…
,
4
\sum\limits_{j=1}^{5}x_{ij}\leq2,i=1,2,\dots,4
j=1∑5xij≤2,i=1,2,…,4
x
i
j
=
0
x_{ij}=0
xij=0或者
1
1
1
import numpy as np
c=np.array([[15,13.8,12.5,11,14.3],[14.5,14,13.2,10.5,15],[13.8,13,12.8,11.3,14.6],[14.7,13.6,13,11.6,14]])
import cvxpy as cp
x=cp.Variable((4,5),integer=True)
obj=cp.Minimize(cp.sum(cp.multiply(c,x)))
con=[0<=x,1>=x,cp.sum(x,axis=0)==1,cp.sum(x,axis=1)<=2]
pro=cp.Problem(obj,con)
pro.solve(solver=cp.GLPK_MI)
print(x.value)
结果如下:
注释:ECOS用于解决凸优化问题,GLPK_MI是用于解决各种问题的优化器(离散或者连续变量,线性或者非线性的目标函数)。具体如何实现我自然不知拉。还得等学了最优化。
参考书籍1例2.10。数据,超链。提取码8848.
目标函数:
min
y
=
∑
i
=
1
15
∑
j
=
1
15
w
i
j
x
i
j
\min y=\sum\limits_{i=1}^{15}\sum\limits_{j=1}^{15}w_{ij}x_{ij}
miny=i=1∑15j=1∑15wijxij
约束条件:
∑
j
=
1
15
x
i
j
=
1
,
i
=
1
,
2
,
…
,
15
\sum\limits_{j=1}^{15}x_{ij}=1,i=1,2,\dots,15
j=1∑15xij=1,i=1,2,…,15
∑
i
=
1
15
x
i
j
=
1
,
j
=
1
,
2
,
…
,
15
\sum\limits_{i=1}^{15}x_{ij}=1,j=1,2,\dots,15
i=1∑15xij=1,j=1,2,…,15
u
i
−
u
j
+
15
x
i
j
<
=
14
,
i
=
1
,
2
,
…
,
15
,
j
=
2
,
3
,
…
,
15
u_i-u_j+15x_{ij}<=14,i=1,2,\dots,15,j=2,3,\dots,15
ui−uj+15xij<=14,i=1,2,…,15,j=2,3,…,15
u
1
=
0
,
1
≤
u
i
≤
14
,
i
=
2
,
3
,
…
,
15
u_1=0,1\leq u_i\leq14,i=2,3,\dots,15
u1=0,1≤ui≤14,i=2,3,…,15
x
i
j
=
0
x_{ij}=0
xij=0或者
1
,
i
,
j
=
1
,
2
,
…
,
15
1,i,j=1,2,\dots,15
1,i,j=1,2,…,15
import pandas as pd data=pd.read_excel("data.xlsx",header=None).fillna(0).values import numpy as np n=data.shape[1];w=np.zeros((n+1,n+1)) for i in range(n): for j in range(n): w[i,j]=sum(data[:,i]*data[:,j]) import cvxpy as cp x=cp.Variable((n+1,n+1),integer=True) obj=cp.Minimize(cp.sum(cp.multiply(w,x))) u=cp.Variable(n+1,integer=True) con=[cp.sum(x,axis=0)==1,cp.sum(x,axis=1)==1,x>=0,x<=1,u[0]==0,u[1:]>=1,u[1:]<=n+1] for i in range(n+1): for j in range(1,n+1): con.append(u[i]-u[j]+(n+1)*x[i,j]<=n) pro=cp.Problem(obj,con) pro.solve(solver=cp.GLPK_MI) print(x.value) print(pro.value)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。