当前位置:   article > 正文

python对线性规划简单求解_线性规划求解器

线性规划求解器

前言

线性规划问题,像这样的

可以选择用lindo,lingo,matlab等,python这类问题的简单求解,当然还有其他复杂的线性规划,先不管。简单点,就只对这类问题的求解

库的使用

用的是cvxpy和numpy

正文

直接给出代码(其实感觉还是有点虚的,不知道会不会有错,自己比较菜)

  1. def line_progra(
  2. expr: list,
  3. cons_matrix: list[list],
  4. determine: list = None,
  5. pos=True,
  6. aim='max',
  7. solver='GLPK_MI'
  8. ):
  9. """
  10. :param expr:方程的
  11. :param cons_matrix:约束方程
  12. :param determine:判断大小,只有的0,1列表
  13. :param pos:正数,True
  14. :param aim:目标
  15. :param solver:求解器
  16. :return:
  17. """
  18. """求解线性规划模型"""
  19. expr_vec = np.array(expr)
  20. constraint_matrix = np.array(cons_matrix)
  21. right_vec = constraint_matrix[:, -1]
  22. constraint_matrix = constraint_matrix[:, :-1]
  23. num = len(constraint_matrix)
  24. x_num=len(expr)
  25. if determine is None:
  26. determine=a=np.zeros(num,dtype=int)
  27. x = cp.Variable(x_num, pos=pos)
  28. constraint = []
  29. if aim == 'max':
  30. target = cp.Maximize(expr_vec @ x)
  31. if aim=='min':
  32. target=cp.Minimize(expr_vec@x)
  33. for i, t in zip(range(num), determine):
  34. match t:
  35. case 0:
  36. constraint.append(constraint_matrix[i] @ x <= right_vec[i])
  37. case 1:
  38. constraint.append(constraint_matrix[i] @ x >= right_vec[i])
  39. case 2:
  40. constraint.append(constraint_matrix[i] @ x == right_vec[i])
  41. pass
  42. solution = cp.Problem(target, constraint)
  43. solution.solve(solver=solver)
  44. return x.value, solution.value

解释代码

参数

expr

可以称为目标向量,就是需要求的方程的系数,怎么叫都行

对于图来说,就是指

expr=[70,50,60]

cons_matrix

可以称为约束矩阵

约束方程,如上图的一段

  1. """
  2. 2
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/593049
    推荐阅读
    相关标签