python 线性规划问题_一学高数,线代就头疼?让python帮你解决(内含教程)
欄目「有學問」是UBook知識在線的趣味科普專欄,專注于分享有趣好玩的科普知識,旨在發(fā)現(xiàn)更多有趣好玩的冷知識,發(fā)掘更多生活中的趣味。
自從上了大學以后,各種高數(shù)線代數(shù)學課防不勝防,有人說,如果你覺得高數(shù)難,那是因為你沒有遇到過線性規(guī)劃。
但是小編一直覺得線性規(guī)劃問題不大,每次作業(yè)我都能保證全對,并且能夠快速做完,因為在大學里早已經(jīng)學會了用python來幫我解決問題。
當然,也不是鼓勵大家自己不做作業(yè),只是學會利用工具使得自己更加效(tou)率(lan),最重要的是,每次做出題目答案后可以檢驗下自己是否能做對,再者說,能夠用編程實現(xiàn)問題求解,本身也是對知識的掌握。
市面上有不少軟件可以直接求解,但是靈活性要低于python,python提供了很多包可以用來數(shù)學計算,今天我為大家介紹的是scripy的linprog,我們利用linprog可以很好的求解線性規(guī)劃問題。
話不多說,讓我們一起進入正式學習——
我們以一個實際例題為例:
例1 求解下列線性規(guī)劃問題
Min Z = 2x1 + 3x2 + x3
s.t.? ? ?
-x1 - x2 + 2x3 <= 10
2x1 - 2x2 + x3 >= 2
x1 + 2x2 + x3 = 5
在這里我們用到scipy中的linprog進行求解,linprog官方的介紹鏈接如下:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html?
我們要使用的函數(shù)為:
scipy.optimize.linprog(c,A_ub=None,b_ub=None,A_eq=None,b_eq=None,bounds=None, method='simplex', callback=None, options=None)
注意要使用linprog,目標函數(shù)要變成求最小值,如果原題目要求求max(最大值),只需對目標函數(shù)取負,但要注意求解的最終值是取負后的目標函數(shù)的最小值,取負即為最大值。
下面開始代碼編寫——
導入我們所需要的linprog
運行結(jié)果如下:
un為目標函數(shù)的最優(yōu)值,slack為松弛變量,status表示優(yōu)化結(jié)果狀態(tài),x為最優(yōu)解。
在該例題中,目標函數(shù)最小值約為-22.5,最優(yōu)解為 x1=-5.75, x2=12.25, x3=-13.75。
好啦,本次python求解線性規(guī)劃的問題就介紹到這,如果大家感興趣的話,后期會繼續(xù)推出更為復雜的數(shù)學求解。
代碼已打包,在后臺回復“線性規(guī)劃”即可獲取。
Archer
UBook簽約作者
勵志做一個不掉頭發(fā)的程序員
對改變世界尤其熱衷
喜歡就星標我們,不要走丟了哦~
總結(jié)
以上是生活随笔為你收集整理的python 线性规划问题_一学高数,线代就头疼?让python帮你解决(内含教程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RTX5 | 线程管理04 - 线程加入
- 下一篇: java 1.7 hashmap源码_j