Python數學建模系列(三):規划問題之非線性規划


@

前言

Hello!小伙伴!
非常感謝您閱讀海轟的文章,倘若文中有錯誤的地方,歡迎您指出~
 
自我介紹 ଘ(੭ˊᵕˋ)੭
昵稱:海轟
標簽:程序猿|C++選手|學生
簡介:因C語言結識編程,隨后轉入計算機專業,有幸拿過一些國獎、省獎...已保研。目前正在學習C++/Linux/Python
學習經驗:扎實基礎 + 多做筆記 + 多敲代碼 + 多思考 + 學好英語!
 
初學Python 小白階段
文章僅作為自己的學習筆記 用於知識體系建立以及復習
題不在多 學一題 懂一題
知其然 知其所以然!

推薦(排版簡潔 適合閱讀)

https://mp.weixin.qq.com/s/ghnolgT_WYXc5-5yIovJ3Q

往期文章

Python數學建模系列(一):規划問題之線性規划

Python數學建模系列(二):規划問題之整數規划

非線性規划

非線性規划可以簡單分兩種,目標函數為凸函數or非凸函數

凸函數的非線性規划,比如\(fun = x^2 + y^2 + xy\),有很多常用庫完成,比如cvxpy

非凸函數的非線性規划(求極值),可以嘗試以下方法:

  • 純數學方法,求導求極值
  • 神經網絡、深度學習(反向傳播算法中鏈式求導過程)
  • scipy. optimize. minimize
scipy.optimize.minimize(fun,x0,args=(),method=None,jac=None,hess=None,hessp=None,bounds= None,constaints=() , tol= None,Callback= None, options=None)

fun:求最小值的目標函數
args:常數值
constraints :約束條件
method:求極值方法,一 般默認。
xO:變量的初始猜測值,注意minimize是局部最優

例題 - 1

計算1/x + x 的最小值

from scipy.optimize import minimize
import numpy as np

def fun(args):
    a = args
    v = lambda x:a/x[0] + x[0]
    return v

args = (1)
x0 = np.asarray((2))
res = minimize(fun(args), x0, method='SLSQP')
res

在這里插入圖片描述

例題 - 2

計算\((2+x_1)/(1+x_2) - 3x_1 + 4x_3\)的最小值,其中\(x_1、x_2、x_3\)范圍在0.1 到 0.9 之間

# 運行環境 Vs Code
from scipy.optimize import minimize
import numpy as np

def fun(args):
    a,b,c,d = args
    v = lambda x: (a + x[0]) / (b + x[1]) - c * x[0] + d * x[2]
    return v

def con(args):
    x1min,x1max,x2min,x2max,x3min,x3max = args
    cons = ({'type':'ineq','fun':lambda x : x[0] - x1min},\
        {'type':'ineq','fun':lambda x:-x[0] + x1max},\
        {'type':'ineq','fun':lambda x:x[1] - x2min},\
        {'type':'ineq','fun':lambda x:-x[1] + x2max},\
        {'type':'ineq','fun':lambda x:x[2] - x3min},\
        {'type':'ineq','fun':lambda x:-x[2] + x3max})
    return cons

args = (2,1,3,4)
args1 = (0.1, 0.9,0.1, 0.9,0.1, 0.9)
cons = con(args1)

x0 = np.asarray((0.5,0.5,0.5))
res = minimize(fun(args), x0, method='SLSQP',constraints=cons)
res.fun,res.success,res.x,res.status

# 結果
(-0.773684210526435, True, array([0.9, 0.9, 0.1]), 0)

結語

學習來源:B站及其課堂PPT,對其中代碼進行了復現

鏈接:https://www.bilibili.com/video/BV12h411d7Dm?from=search&seid=5685064698782810720

文章僅作為學習筆記,記錄從0到1的一個過程

希望對您有所幫助,如有錯誤歡迎小伙伴指正~

我是 海轟ଘ(੭ˊᵕˋ)੭

如果您覺得寫得可以的話,請點個贊吧

謝謝支持 ❤️

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM