簡體   English   中英

矩陣形式的簡單符號 LP 問題

[英]Simple Symbolic LP problem to Matrix form

我解決了一個線性規划問題,這是我的符號形式代碼。

import cvxpy as cp
import numpy as np

x11 = cp.Variable(nonneg=True)
x12 = cp.Variable(nonneg=True)
x21 = cp.Variable(nonneg=True)
x22 = cp.Variable(nonneg=True)
x31 = cp.Variable(nonneg=True)
x32 = cp.Variable(nonneg=True)

constraints = [x11 + x12 == 1000,
              x21 + x22 == 1500,
              x31 + x32 == 1200,
              x11 + x21 + x31 == 2300,
              x12 + x22 + x32 == 1400]

obj = cp.Minimize((80*x11 + 215*x12 + 100*x21 + 108*x22 + 102*x31 + 68*x32))

prob = cp.Problem(obj, constraints)
prob.solve()
print('status: ', prob.status)
print('optimal value: ', prob.value)
print('optimal variables: ', x11.value, x12.value, x21.value, x22.value, x31.value, x32.value)

狀態:最佳

最佳值:313200.00003146095

最佳變量:999.9999999627637 3.7235625579412695e-08 1299.99999940076 200.00000059923934 6.364774533690845e-07 1199.999999363524

但我想將此代碼更改為矩陣形式。 這是我的矩陣形式的另一個代碼

x = cp.Variable((3, 2), nonneg=True)

constraints = [cp.sum(x[0,:]) == 1000,
              cp.sum(x[1,:]) == 1500,
              cp.sum(x[2,:]) == 1200,
              cp.sum(x[:, 0]) == 2300,
              cp.sum(x[:, 1]) == 1400]

coe = [[80, 215], [100, 108], [102, 68]]

t
obj = cp.Minimize(cp.sum(coe @ x))

prob = cp.Problem(obj, constraints)
prob.solve()
print('status: ', prob.status)
print('optimal value: ', prob.value)
for i in range(3):
    for j in range(2):
        print('optimal variables:x('+str(i)+','+str(j)+')', x[i,j].value)

狀態:最佳

最佳值:810999.9999986519

最優變量:x(0,0) 649.9892627159586

最優變量:x(0,1) 350.01073728291954

最優變量:x(1,0) 900.0113075911175

最優變量:x(1,1) 599.9886924056102

最優變量:x(2,0) 749.9994296884455

最優變量:x(2,1) 450.00057030957413

我認為結果應該是相同的,矩陣形式的代碼是錯誤的。 你能找出我的錯誤嗎?

在處理矩陣乘法時必須小心,尤其是在不同的庫上。 我發現@用於矩陣矩陣乘法。 而不是element-wise乘法。 cvxpy的官方文檔

@乘法期間,cvxpy 以某種方式誤解了您的目標。

解決方法:將obj = cp.Minimize(cp.sum(coe @ x))改為

obj = cp.Minimize(cp.sum(cp.multiply(coe, xT))) (我也很困惑為什么coe被視為(2x3))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM