当前位置:   article > 正文

Python数学建模之线性规划和整数规划模型_线性规划模型代码

线性规划模型代码

1.线性规划模型

1.线性规划模型及概念

1.求解线性规划模型的一般步骤:

2.线性规划模型的一般形式

或简写为:

3.向量形式

4.矩阵形式

 5.线性规划问题的解

2.模型求解及应用

需要用Python的cvxpy库。安装步骤参见http://t.csdnimg.cn/ONvge

例1:

 代码示例:

  1. import cvxpy as cp
  2. from numpy import array
  3. c = array([70, 50, 60]) # 定义目标向量
  4. a = array([[2, 4, 3],[3, 1, 5], [7, 3, 5]]) # 定义约束矩阵
  5. b = array([150, 160, 200]) # 定义约束条件的右边向量
  6. x = cp.Variable(3, pos=True) # 定义 3 个决策变量
  7. obj = cp.Maximize(c@x) # 构造目标函数
  8. cons = [a@x<=b] # 构造约束条件
  9. prob = cp.Problem(obj, cons)
  10. prob.solve(solver='GLPK_MI') # 求解问题
  11. print('最优解为:', x.value)
  12. print('最优值为:', prob.value)

例2:

示例代码: 

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

例3:

示例代码:

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

例4:

示例代码:

  1. import numpy as np
  2. import cvxpy as cp
  3. import pandas as pd
  4. c = np.genfromtxt('data4_5_1.txt', dtype=float, max_rows=6, usecols=range(8)) # 读前 6 行前 8 列数据
  5. e = np.genfromtxt('data4_5_1.txt', dtype=float, max_rows=6, usecols=8) # 读最后一列数据
  6. d = np.genfromtxt('data4_5_1.txt', dtype=float, skip_header=6) # 读最后一行数据
  7. x = cp.Variable((6, 8), pos=True)
  8. obj = cp.Minimize(cp.sum(cp.multiply(c, x)))
  9. con = [cp.sum(x,axis=0)==d,
  10. cp.sum(x,axis=1)<=e]
  11. prob = cp.Problem(obj, con)
  12. prob.solve(solver='GLPK_MI')
  13. print('最优解为:\n', x.value)
  14. print('最优值为:', prob.value)
  15. xd = pd.DataFrame(x.value)
  16. xd.to_excel('data4_5_2.xlsx') # 数据写到 excel 文件,便于做表使用
  17. # 通过 excel 文件传递数据
  18. # 程序文件 ex4_5_2.py
  19. import cvxpy as cp
  20. import pandas as pd
  21. data = pd.read_excel('data4_5_3.xlsx', header=None)
  22. data = data.values
  23. c = data[:-1, :-1]
  24. d = data[-1, :-1]
  25. e = data[:-1, -1]
  26. x = cp.Variable((6, 8), pos=True)
  27. obj = cp.Minimize(cp.sum(cp.multiply(c, x)))
  28. con = [cp.sum(x,axis=0)==d,
  29. cp.sum(x,axis=1)<=e]
  30. prob = cp.Problem(obj, con)
  31. prob.solve(solver='GLPK_MI')
  32. print('最优解为:\n', x.value)
  33. print('最优值为:', prob.value)
  34. xd = pd.DataFrame(x.value)
  35. xd.to_excel('data4_5_4.xlsx')

2.整数规划

1.整数线性规划模型

2.整数线性规划模型的求解

例1:纯整数规划

  1. import cvxpy as cp
  2. x = cp.Variable(6, integer=True)
  3. obj = cp.Minimize(sum(x))
  4. cons = [x[0]+x[5]>=35,x[0]+x[1]>=40,
  5. x[1]+x[2]>=50,x[2]+x[3]>=45,
  6. x[3]+x[4]>=55,x[4]+x[5]>=30,
  7. x>=0]
  8. prob = cp.Problem(obj, cons)
  9. prob.solve(solver='GLPK_MI')
  10. print('最优值为:', prob.value)
  11. print('最优解为:', x.value)
  12. # 解法二:求余运算
  13. import cvxpy as cp
  14. import numpy as np
  15. a = np.array([35, 40, 50, 45, 55, 30])
  16. x = cp.Variable(6, integer=True)
  17. obj = cp.Minimize(sum(x))
  18. cons = [x>=0]
  19. for i in range(6):
  20. cons.append(x[(i-1)%6]+x[i]>=a[i])
  21. prob = cp.Problem(obj, cons)
  22. prob.solve(solver='GLPK_MI')
  23. print('最优值为:', prob.value)
  24. print('最优解为:', x.value)

 例2:0-1整数规划

  1. import cvxpy as cp
  2. import numpy as np
  3. c = np.loadtxt('data4_10.txt')
  4. x = cp.Variable((4, 5), integer=True) # 定义决策变量
  5. obj = cp.Minimize(cp.sum(cp.multiply(c, x))) # 构造目标函数
  6. cons = [0<=x, x<=1, cp.sum(x, axis=0)==1, # 构造约束条件
  7. cp.sum(x, axis=1)<=2]
  8. prob = cp.Problem(obj, cons)
  9. prob.solve(solver='GLPK_MI') # 求解问题
  10. print('最优解为:\n', x.value)
  11. print('最优值为:', prob.value)

例3:0-1整数规划 

  1. import cvxpy as cp
  2. import numpy as np
  3. a = np.loadtxt('data4_11.txt')
  4. d = np.zeros((10, 10))
  5. for i in range(10):
  6. for j in range(10):
  7. d[i, j] = np.linalg.norm(a[:, i]-a[:, j])
  8. x = cp.Variable(10, integer=True)
  9. y = cp.Variable((10, 10), integer=True)
  10. obj = cp.Minimize(sum(x))
  11. cons = [sum(y)>=1, cp.sum(y, axis=1)<=5,
  12. x>=0, x<=1, y>=0, y<=1]
  13. for i in range(10):
  14. cons.append(x[i]==y[i, j])
  15. for j in range(10):
  16. cons.append(d[i, j]*y[i, j]<=10*x[i])
  17. cons.append(x[i]>=y[i, j])
  18. prob = cp.Problem(obj, cons)
  19. prob.solve(solver='GLPK_MI')
  20. print('最优值为:', prob.value)
  21. print('最优解为:\n', x.value)
  22. print('----------\n', y.value)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/920573
推荐阅读
相关标签
  

闽ICP备14008679号