cvxpy求解
比如我們求解這樣的一個問題:

我們需要配置基本的環境,首先記得按順序安裝模塊:
pip install numpy
pip install mkl
pip install cvxopt
pip install scs
pip install ecos
pip install osqp
再:
pip install cvxpy
完整代碼如下:
# coding=gbk
"""
作者:川川
@時間 : 2022/1/30 0:35
群:428335755
"""
import cvxpy as cp
from numpy import array
c = array([40, 90]) # 定義目標向量
a = array([[9, 7], [-7, -20]]) # 定義約束矩陣
b = array([56, -70]) # 定義約束條件的右邊向量
x = cp.Variable(2, integer=True) # 定義兩個整數決策變數
obj = cp.Minimize(c * x) # 構造目標函式
cons = [a * x <= b, x >= 0] # 構造約束條件
prob = cp.Problem(obj, cons) # 構建問題模型
prob.solve(solver='GLPK_MI', verbose=True) # 求解問題
print("最優值為:", prob.value)
print("最優解為:\n", x.value)
運行結果如下:

由于注釋很詳細,我就沒啥好說的了,如果你有不懂,可以評論區留言,或者加我聯系方式問我,
scipy求解
模塊安裝:
pip install scipy
首先要轉化為標準的式:

求解標準式代碼如下:
from scipy import optimize
import numpy as np
# 求解函式
res = optimize.linprog(c, A, b, Aeq, beq, LB, UB, X0, OPTIONS)
# 目標函式最小值
print(res.fun)
# 最優解
print(res.x)
標準形式是<=,如果是>=,則在兩邊加上符號-,
舉個例子如下:

求解代碼為:
from scipy import optimize
import numpy as np
# 確定c,A,b,Aeq,beq
c = np.array([2, 3, -5])
A = np.array([[-2, 5, -1], [1, 3, 1]])
B = np.array([-10, 12])
Aeq = np.array([[1, 1, 1]])
Beq = np.array([7])
# 求解
res = optimize.linprog(-c, A, B, Aeq, Beq)
print(res)
運行如下:

解釋一些結果:
- fun是目標函式最小值
- x是最優解,即上面的x1,x2,x3的最優解
推薦一本好書
《機器學習線性代數基礎:Python語言描述》的優勢:本書以機器學習涉及的線性代數核心知識為重點,進行新的嘗試和突破:從坐標與變換、空間與映射、近似與擬合、相似與特征、降維與壓縮這5個維度,環環相扣地展開線性代數與機器學習演算法緊密結合的核心內容,

感興趣可以自行購買:
京東自營購買鏈接:
https://item.jd.com/12566109.html
當當自營購買鏈接:
http://product.dangdang.com/27921482.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423200.html
標籤:AI
