資源簡介
python窗體實現線性規劃中的單純形法,其中包含一個主要實現單純形表算法的LPtable.py和實現tkinter窗體輸入的test1.py。使用時直接在后者中點運行即可。

代碼片段和文件信息
#?-*-?coding:?utf-8?-*-
class?Table(object):
????def?__init__(selfX_numB_numz0Xbasebound):??#初始化函數
????????self.X_num=X_num????#變量個數
????????self.B_num=B_num????#約束條件個數
????????self.z0=z0??????????#目標函數
????????self.check=[]???????#檢驗數
????????self.Xbase=Xbase????#基變量
????????self.bound=bound????#約束條件
????????self.flag=0?????????#解的類型
????def?FindMain(self):????#尋找主元素
????????j=self.check.index(max(self.check))?#獲取檢驗數中最大值序號
????????theta=[]
????????for?i?in?range(self.B_num):
????????????if?self.bound[i][j]==0:?????#當被除數為0給它一個足夠大的值
????????????????th=1000
????????????else:
????????????????th=self.bound[i][self.X_num]/self.bound[i][j]
????????????if?th<0:????????????????????????#當theta<0時給它一個足夠大的值
????????????????th=10000
????????????theta.append(th)
????????i=theta.index(min(theta))???????????#獲取檢驗數中最小值序號
????????main=self.bound[i][j]????????
????????return?[ijmain]
????def?baseChange(selfmodel):???#基變換
????????if?model==1:
????????????[ijmain]=self.FindMain()
????????else:
????????????[ijmain]=self.FindMain2()
????????self.Xbase[i]=j?????#更換基變量
????????for?t?in?range(self.X_num+1):
????????????self.bound[i][t]=self.bound[i][t]/main
????????for?k?in?range(self.B_num):
????????????if?k!=i:
????????????????times=self.bound[k][j]
????????????????for?t?in?range(self.X_num+1):
????????????????????temp=self.bound[i][t]*times
????????????????????self.bound[k][t]=self.bound[k][t]-temp
????def?IsEnd(self):???#檢驗是否為最優解且最優解是否唯一
????????self.flag=1
????????zero=0
????????for?i?in?range(self.X_num):
????????????if?self.check[i]>0:??#檢驗數大于0,非最優解
????????????????self.flag=0
????????????????break
????????????if?abs(self.check[i])<0.00001:???#因為M取1000,可能檢驗數的計算有些許誤差
????????????????zero+=1
????????????????if?zero>self.B_num:
????????????????????self.flag=2??#檢驗數中0的個數大于基變量個數,有無窮多最優解
????def?Iteration(self):????#迭代函數
????????lim=100??#最大迭代次數(防止無解時無限迭代)
????????while(lim>0):
????????????self.check=[]
????????????for?i?in?range(self.X_num):?????#計算檢驗數
????????????????temp=0
????????????????for?j?in?range(self.B_num):
????????????????????temp+=self.bound[j][i]*self.z0[self.Xbase[j]]
????????????????self.check.append(self.z0[i]-temp)
????????????self.IsEnd()
????????????if?self.flag>0:
????????????????break
????????????else:
????????????????self.baseChange(1)
????????????????lim-=1
????????????
????def?Iteration2(self):????#迭代函數
????????lim=100??#最大迭代次數(防止無解時無限迭代)
????????while(lim>0):
????????????self.check=[]
????????????for?i?in?range(self.X_num):?????#計算檢驗數
????????????????temp=0
????????????????for?j?in?range(self.B_num):
????????????????????temp+=self.bound[j][i]*self.z0[self.Xbase[j]]
????????????????self.check.append(self.z0[i]-temp)
????????????self.IsEnd2()
????????????if?self.flag>0:
????????????????break
????????????else:
????????????????self.baseChange(2)
????????????????lim-=1
????????
????def?IsEnd2(self):
????????self.flag=1
????????for?i?in?range(self.B_num):
????????????if?self.bound[i][self.X_num]<0:
????????????????self.flag=0
????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2020-03-27?15:13??LP\
?????文件????????4071??2020-03-27?15:07??LP\LPTable.py
?????目錄???????????0??2020-03-27?15:17??__MACOSX\
?????目錄???????????0??2020-03-27?15:17??__MACOSX\LP\
?????文件?????????425??2020-03-27?15:07??__MACOSX\LP\._LPTable.py
?????文件????????6148??2020-03-27?15:13??LP\.DS_Store
?????文件?????????120??2020-03-27?15:13??__MACOSX\LP\._.DS_Store
?????文件????????5731??2020-03-27?15:07??LP\test1.py
?????文件?????????425??2020-03-27?15:07??__MACOSX\LP\._test1.py
?????文件?????????427??2020-03-27?15:13??__MACOSX\._LP
- 上一篇:MACD指標股票量化投資策略源碼
- 下一篇:Python 3網絡爬蟲開發實戰
評論
共有 條評論