【问题标题】:Linear Programming with cvxpy使用 cvxpy 进行线性规划
【发布时间】:2018-12-06 11:03:45
【问题描述】:

我想问你关于优化线性规划的问题。

我有一个目标函数,约束函数如下,

  • variables(x1, x2, x3, x4, x5, x6) 是产品的数量,现在产品的数量必须是固定数字。
  • 这个问题的目标是优化产品的数量。

    1. 目标函数(c.T * [x1, x2, x3, x4, x5, x6])

      [[c11, c12, c13, c14, c15 c16],
      
      [c21, c22, c23, c24, c25, c26],
                                    X     [x1, x2, x3, x4, x5, x6]  
      [c31, c32, c33, c34, c35, c36],
      
      [c41, c42, c43, c44, c45, c45]]
      

    我想优化的结果如下

    c11*x1 + c12*x2 + c13*x3 + c14*x4 + c15*x5 + c16*x6 +
    c21*x1 + c22*x2 + c23*x3 + c24*x4 + c25*x5 + c26*x6 + 
    c31*x1 + c32*x2 + c33*x3 + c34*x4 + c35*x5 + c36*x6 + 
    c41*x1 + c42*x2 + c43*x3 + c44*x4 + c45*x5 + c46*x6 = optimized value
    
    1. 约束函数

    1) 约束_1

    5500000*x1+2500000*x2+825000*x3+5500000*x4+5500000*x5+5500000*x6

    2) 约束_2

    x1 <= 10
    x2 <= 10
    x3 <= 10
    x4 <= 10
    x5 <= 10
    x6 <= 10
    

我遇到的问题是“Cs(c1,1 ~ c4,5) 的目标函数”。

我已经解决了目标函数中具有整数值的线性规划,但矩阵中没有。

我已经尝试了所有其他方法,但现在我真的需要帮助。

请就这个问题向我提出任何想法或代码。

【问题讨论】:

  • 我不确定我是否理解您在哪里看到了问题。如果我将Ki 定义为c1i+c2i+c3i+c4i,那么您的问题将变成最大化K1*x1 + K2*x2 + ... + K6*x6,并且您声称您知道如何解决此类问题。那么你的障碍在哪里?
  • 如果一个目标函数是3 * x1 + 2 * x2 + 3 * x3 + 4 * x4 + 5 * x5 + 6 * x6,那么代码如下,
  • c = np.array([3, 2, 3, 4, 5, 6]) A = np.array([[5500000, 2500000, 825000, 5500000, 5500000, 5500000], [1,0,0,0,0,0], [0,1,0,0,0,0], [0,0,1,0,0,0], [0,0,0,1,0,0], [0,0,0,0,1,0], [0,0,0,0,0,1]]) b = np.array([800000000, 10, 10, 10, 10, 10, 10]) c = matrix(c, tc='d') G = matrix(A, tc='d') h = matrix(b, tc='d') status, x = glpk.ilp(c, g, h, I=set([0,1,2,3,4,5]))
  • 我遇到的问题是我不确定如何扩展 c 部分。在代码中,它是 1 x 6 矩阵,但现在我需要用 4 x 6 矩阵(c11 到 c46)求解。

标签: python math linear-programming cvxpy cvxopt


【解决方案1】:

假设您已将原始 cij 存储在一个 numpy 数组中,您可能想先总结诸如 c11+c21+c31+c41 之类的术语。这可以通过总结每一列来完成,试试 c.sum(axis = 0)

>>> import numpy as np
>>> c = np.arange(24).reshape(4,6)
>>> c
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])
>>> c = c.sum(axis=0)
>>> c
array([36, 40, 44, 48, 52, 56])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2017-04-22
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多