MATLAB含有绝对值的线性规划,Lingo求解带绝对值的线性规划模型
最近在解決一個費用分攤的問題,就是讓費用在幾個不同的項目之間分攤,并且分攤后的總額和費用之間差額的絕對值在一定的范圍之內,當然越小越好。該問題是一個典型的線性規劃問題,說實話如果沒有學過運籌學,肯定解決不了該問題,幸好博主學過,而且還解決過比這更復雜的問題,今天就寫一篇文章,懷念一下讀研時的美好時光,也給有類似問題的人一個思路。
先把這個問題用一個很簡單的例子描述:假設有三種項目費用分別是,項目A90 元,項目B80 元,項目C70元,總費用是1983元,現在要確定ABC三個各分配多少個,才能最接近1983元,且最大誤差不得超過30元。
根據上述問題確定模型(模型不知道描述得準確嗎,還有一個要求就是絕對值里面的數最小):
|90*X+80*Y+70*Z-1983|<=30;
X,Y,Z>=0;
用LINGO描述為:
Min=@ABS(90*x+80*y+70*z-1983);
@ABS(90*x+80*y+70*z-1983)<=30;
@GIN(x);
@GIN(y);
@GIN(z);
用LINGO求解的結果為:
從結果上看出,X、Y、Z分別取值18、1、4,能使分配的總和最接近費用值,與費用值的差額為3。
考慮到不止一個費用,而是有成百上千個費用需要分攤,那么就得考慮利用程序來批量計算。按之前上學時的做法,寫程序,通過程序調用數據生成模型來求解。這里就將數據保存到計事本中,然后用C語言根據計事本中的數據,生成模型求解,將求解結果返回到計事本中。
假設文本文件為data.txt,內容為編號,費用值兩個內容,現在用C讀取每行的費用值,生成模型求解,然后將結果保存到每行的結尾。
data.txt的內容:
1 1983
2 2023
3 2323
總結
以上是生活随笔為你收集整理的MATLAB含有绝对值的线性规划,Lingo求解带绝对值的线性规划模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机械自动化算不算计算机相关专业,机械工程
- 下一篇: python解数独--世界最难数独2.3