数模竞赛-线性规划模型

线性规划

例题1:求解:

maxz=70x1+50x2+60x3,s.t.{2x1+4x2+3x3150,3x1+x2+5x3160,7x1+3x2+5x3200,xi0,i=1,2,3.

代码:

python
1
2
3
4
5
6
7
8
9
10
11
#pip install cvxpy cvxpy[GLPK_MI] cvxopt
import cvxpy,numpy
c=numpy.array([70,50,60])
a=numpy.array([[2,4,3],[3,1,5],[7,3,5]])
b=numpy.array([150,160,200])
x=cvxpy.Variable(3,pos=True) #决策变量 列向量
obj=cvxpy.Maximize(c@x)
cons=[a@x<=b]
prob=cvxpy.Problem(obj,cons)
prob.solve(solver='GLPK_MI')
print(x.value,prob.value) #最优解 和 最优值z

例题2:求解:

maxz=1.15x41+1.40x23+1.25x32+1.06x54,s.t.{x11+x14=100000,x21+x23+x24=1.06x14,x31+x32+x34=1.15x21+1.06x34,x54=1.15x31+1.06x44,x3240000,x2330000,xij0;i=1,2,3,4,5;j=1,2,3,4.

代码:

python
1
2
3
4
5
6
7
8
9
10
11
12
import cvxpy
x=cvxpy.Variable((5,4),pos=True)
obj=cvxpy.Maximize(1.15*x[3,0]+1.40*x[1,2]+1.25*x[2,1]+1.06*x[4,3])
cons=[x[0,0]+x[0,3]==100000,
x[1,0]+x[1,2]+x[1,3]==1.06*x[0,3],
x[2,0]+x[2,1]+x[2,3]==1.15*x[0,0]+1.06*x[1,3],
x[3,0]+x[3,3]==1.15*x[1,0]+1.06*x[2,3],
x[4,3]==1.15*x[2,0]+1.06*x[3,3],
x[2,1]<=40000,x[1,2]<=30000]
prob=cvxpy.Problem(obj,cons)
prob.solve(solver='GLPK_MI')
print(prob.value,x.value)

例题3:求解:

minz=2800(x11+x21+x31+x41)+4500(x12+x22+x32)+6000(x13+x23)+7300x14,s.t.{x11+x12+x13+x1415,x12+x13+x14+x21+x22+x2310,x13+x14+x22+x23+x31+x3220,x14+x23+x32+x4112,xij0;i=1,2,3,4;j=1,2,3,4.

代码:

python
1
2
3
4
5
6
7
8
9
10
import cvxpy
x=cvxpy.Variable((4,4),pos=True)
obj=cvxpy.Minimize(2800*sum(x[:,0])+4500*sum(x[:3,1])+6000*sum(x[:2,2])+7300*x[0,3])
cons=[sum(x[0,:])>=15,
sum(x[0,1:])+sum(x[2,:3])>=10,
sum(x[0,2:])+sum(x[1,1:3])+sum(x[2,:2])>=20,
x[0,3]+x[1,2]+x[2,1]+x[3,0]>=12]
prob=cvxpy.Problem(obj,cons)
prob.solve(solver='GLPK_MI')
print(prob.value,x.value)

整数规划

例题:

minz=i=16xi,s.t.{x1+x635,x1+x240,x2+x350,x3+x445,x4+x555,x5+x630,xi0,xiZ,i=1,2,,6.

代码:

python
1
2
3
4
5
6
7
8
9
10
import cvxpy,numpy
a=numpy.array([35,40,50,45,55,30])
x=cvxpy.Variable(6,integer=True)
obj=cvxpy.Minimize(sum(x))
cons=[x>=0]
for i in range(6):
cons.append(x[(i-1)%6]+x[i]>=a[i])
prob=cvxpy.Problem(obj,cons)
prob.solve(solver='GLPK_MI')
print(prob.value,x.value)