數學建模 割平面算法求解整數規劃基本原理與編程實現

基本思想

松弛問題:線性規劃
割掉一塊全部都是小數的區域(這一部分取不到整數)
在這里插入圖片描述

案例

1)橫坐標x1,縱坐標x2
2)藍色小三角形的區域:x2:(1,7/4) x1:(0,3/4)
這塊區域,x1與x2完全取不到整數,所以直接切去

所以,此時取值范圍變化了:
x2<=1把此約束條件帶入,得到x1=1,x2=1,z=2

3)能夠取到整數的區域就不能切掉
在這里插入圖片描述
引入松弛變量:(解出x1=1,x2=1,z=2的過程)
1)松弛變量:引入之后的效果與原先是一致的
如:-x1+x2<=1 引入x3>=0之后 得到 -x1+x2+x3=1 則此時-x1+x2仍然<=1,所以不影響結果

2)把式子4與5的系數與單個數字拆分為(整數+小數,小數>=0)
即:x1=(1+0)x1 -1/4x3=(-1+3/4)x3 1/4x4=(0+1/4)x4 3/4=(0+3/4)

然后再把整數部分(系數為整數與單個整數)放在左邊,小數部分放在右邊(系數為小數+單個小數)

所以現在變為了
3/4-正數=一個整數
而且0=<3/4<=1 x3,x4>=0
所以 ,3/4-正數<=0
即 3x3+x4>=3
4x2+3x3+x4>=7

在這里插入圖片描述

基本步驟

引入松弛變量,變不等式為等式
aikxk 松弛變量
aik=[aik]+fik 松弛變量的系數化為正數部分和小數部分
[aik] xk正數部分匯合
fik xk小數部分匯合

[aik]xk -[bi]整數部分放在左側
[bi]+fi 小數部分放在右側

在這里插入圖片描述

切割平面法流程

在這里插入圖片描述

案例

在這里插入圖片描述
解答:
在這里插入圖片描述
引入松弛變量:
matlab中只有min,所以求最大值要加上負號
在這里插入圖片描述

matlab代碼

DividePlane.m

function  [intx,intf] = DividePlane(A,c,b,baseVector)
%功能:用割平面法求解整數規劃
%調用格式:[intx,intf]=DividePlane(A,c,b,baseVector)
%其中,A:約束矩陣;
%      c:目標函數系數向量;
%      b:約束右端向量;
%      baseVector:初始基向量;
%      intx:目標函數取最小值時的自變量值;
%      intf:目標函數的最小值;
sz = size(A);
nVia = sz(2);%獲取有多少決策變量
n = sz(1);%獲取有多少約束條件
xx = 1:nVia;if length(baseVector) ~= ndisp('基變量的個數要與約束矩陣的行數相等!');mx = NaN;mf = NaN;return;
endM = 0;
sigma = -[transpose(c) zeros(1,(nVia-length(c)))];
xb = b;%首先用單純形法求出最優解
while 1   [maxs,ind] = max(sigma);
%--------------------用單純形法求最優解--------------------------------------if maxs <= 0   %當檢驗數均小于0時,求得最優解。      vr = find(c~=0 ,1,'last');for l=1:vrele = find(baseVector == l,1);if(isempty(ele))mx(l) = 0;elsemx(l)=xb(ele);endendif max(abs(round(mx) - mx))<1.0e-7  %判斷最優解是否為整數解,如果是整數解。intx = mx;intf = mx*c;return;else  %如果最優解不是整數解時,構建切割方程sz = size(A);sr = sz(1);sc = sz(2);[max_x, index_x] = max(abs(round(mx) - mx));[isB, num] = find(index_x == baseVector);fi = xb(num) - floor(xb(num));for i=1:(index_x-1)Atmp(1,i) = A(num,i) - floor(A(num,i));endfor i=(index_x+1):scAtmp(1,i) = A(num,i) - floor(A(num,i));endAtmp(1,index_x) = 0; %構建對偶單純形法的初始表格A = [A zeros(sr,1);-Atmp(1,:) 1];xb = [xb;-fi];baseVector = [baseVector sc+1];sigma = [sigma 0];%-------------------對偶單純形法的迭代過程----------------------while 1%----------------------------------------------------------if xb >= 0    %判斷如果右端向量均大于0,求得最優解if max(abs(round(xb) - xb))<1.0e-7   %如果用對偶單純形法求得了整數解,則返回最優整數解vr = find(c~=0 ,1,'last');for l=1:vrele = find(baseVector == l,1);if(isempty(ele))mx_1(l) = 0;elsemx_1(l)=xb(ele);endendintx = mx_1;intf = mx_1*c;return;else   %如果對偶單純形法求得的最優解不是整數解,繼續添加切割方程sz = size(A);sr = sz(1);sc = sz(2);[max_x, index_x] = max(abs(round(mx_1) - mx_1));[isB, num] = find(index_x == baseVector);fi = xb(num) - floor(xb(num));for i=1:(index_x-1)Atmp(1,i) = A(num,i) - floor(A(num,i));endfor i=(index_x+1):scAtmp(1,i) = A(num,i) - floor(A(num,i));endAtmp(1,index_x) = 0;  %下一次對偶單純形迭代的初始表格A = [A zeros(sr,1);-Atmp(1,:) 1];xb = [xb;-fi];baseVector = [baseVector sc+1];sigma = [sigma 0];continue;endelse   %如果右端向量不全大于0,則進行對偶單純形法的換基變量過程minb_1 = inf;chagB_1 = inf;sA = size(A);[br,idb] = min(xb);for j=1:sA(2)if A(idb,j)<0bm = sigma(j)/A(idb,j);if bm<minb_1minb_1 = bm;chagB_1 = j;endendendsigma = sigma -A(idb,:)*minb_1;xb(idb) = xb(idb)/A(idb,chagB_1);A(idb,:) = A(idb,:)/A(idb,chagB_1);for i =1:sA(1)if i ~= idbxb(i) = xb(i)-A(i,chagB_1)*xb(idb);A(i,:) = A(i,:) - A(i,chagB_1)*A(idb,:);endendbaseVector(idb) = chagB_1;end%------------------------------------------------------------end %--------------------對偶單純形法的迭代過程---------------------    end     else     %如果檢驗數有不小于0的,則進行單純形算法的迭代過程minb = inf;chagB = inf;for j=1:nif A(j,ind)>0bz = xb(j)/A(j,ind);if bz<minbminb = bz;chagB = j;endendendsigma = sigma -A(chagB,:)*maxs/A(chagB,ind);xb(chagB) = xb(chagB)/A(chagB,ind);A(chagB,:) = A(chagB,:)/A(chagB,ind);for i =1:nif i ~= chagBxb(i) = xb(i)-A(i,ind)*xb(chagB);A(i,:) = A(i,:) - A(i,ind)*A(chagB,:);endendbaseVector(chagB) = ind;endM = M + 1;if (M == 1000000)disp('找不到最優解!');mx = NaN; minf = NaN;return;end
end

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446505.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446505.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux dd命令 復制(拷貝)文件,并對原文件進行轉換

dd&#xff0c;是 device driver 的縮寫&#xff0c;它可以稱得上是“Linux 世界中的搬運工”&#xff0c;它用來讀取設備、文件中的內容&#xff0c;并原封不動地復制到指定位置。其實現在的主流硬盤已經是 SATA 接口的了&#xff0c;下面我要備份的硬盤是 dev/sda&#xff0c…

數學建模 匈牙利算法求解整數規劃基本原理與編程實現

投資問題(0-1規劃) 匈牙利算法求解0-1規劃問題 解答: 項目之間是互斥關系,所以使用x1x2x31; 項目5是以項目1為先驗條件,所以x5<x1,意味著x11時,x51或0 ,但x10時,x50 案例- 互斥約束問題 1)當兩個約束條件是互斥時,新建立一個約束條件y(0-1) 2)如果M取無窮大的數,此時就…

Ubuntu通過可視化界面配置 查找IP地址不存在的解決辦法

命令行用ifconfig eno0 up&#xff0c;啟用網卡&#xff0c;沒有問題&#xff0c;硬件ok&#xff0c;但是配置里面還是找不到。之前修改了 /etc/network/interfaces&#xff0c;去掉配置。由于圖形界面使用的是 network-manager&#xff0c;所以需要修改重啟sudo service netwo…

數學建模 非線性規劃原理的應用與編程實現

非線性規劃模型NP 包含非線性函數:不是直線而是曲線、曲面、或不確定的屬性,叫非線性。 如:x^2 線性函數:一次函數,axb 列1-投資決策問題 解答: 設置決策變量: 1)投資某個項目達到收益最高,使用比值法(更直觀) 收益/投資花費 取值范圍 1)*非線性規劃中常用 限制xi0或1(在編…

C++ STL list添加(插入)元素方法詳解

C STL list添加&#xff08;插入&#xff09;元素方法詳解主要內容主要內容 參考鏈接

數學建模1 賽前準備 賽題選擇 查找文獻

了解國賽 生成了MD5碼之后就不能再碰文件&#xff0c;打開都不行 軟件安裝 其他 ABC賽題特點 一般選擇B,C題 賽題選擇 1.排除背景都看不懂的題 定題 1.少數服從多數 2.選擇資料多的題 搜索技巧 1.雙引號–“CT參數標定”&#xff08;內容或標題一致&#xff09; 2…

劍指offer 第一章 面試的流程

面試的流程 面試的三種形式 電話面試&#xff1a;形象化語言講解細節&#xff1b;如果沒有聽清楚和聽懂問題&#xff0c;不要不懂裝懂&#xff0c;答非所問共享桌面&#xff0c;遠程面試&#xff1a;編程習慣和調試能力。1&#xff0c;思考清楚再開始編碼&#xff0c;先想思路…

數學建模2 數據預處理

注意 題目給出的數據不能直接使用&#xff0c;要對數據進行異常處理 缺失值 1.缺失值太多就要把該項指標刪除&#xff08;40%相當大&#xff09; 2.處理&#xff1a;對精度不高 定量數據&#xff0c;使用均值 定性數據&#xff0c;使用眾數 3.對數據精度有要求 但對導數沒有…

n個整數,其中有兩個數是重復的,要求找出這兩個重復的整數

n個整數&#xff0c;其中有兩個數是重復的&#xff0c;要求找出這兩個重復的整數方法一方法二方法三空間復雜度的計算常量空間線性空間二維空間遞歸空間方法一 使用set集合 將每一個元素放到set集合中&#xff0c;加入的時候判斷集合中是否存在此元素&#xff0c;如果if判斷找…

數學建模3 論文排版注意點

注意事項 1&#xff09;論文標題不超過三級 5 5.1 5.1.1 2&#xff09;不要留有大片空白 3&#xff09;表格&#xff1a;三線表&#xff0c;只有三條橫線&#xff0c;沒有豎線&#xff0c;表的標題放在表的上方 4&#xff09;圖名放在圖的下方&#xff0c;圖1 xxx 5)重要…

修改ubuntu的IP地址,靜態IP地址

師姐&#xff0c;配置ip地址 當時你給服務器安裝系統&#xff0c;然后配置IP地址 sudo ifconfig eth0 172.27.100.110 netmask 255.255.0.0

數學建模4 論文寫作排版和技巧

文字 標題一&#xff1a;四號黑體 標題二、三&#xff1a;小四號黑體 正文&#xff1a;宋體小四 行距1.5 標題前后空0.5行 英文和數字使用Times New Roman 小四&#xff08;包括表格中的內 表頭在表格上方&#xff0c;需寫成“表1 什么什么表”黑體小五加粗、居中 圖名在圖下…

哈希表和有序表的簡單介紹

哈希表的簡單介紹 哈希表是一種集合結構 包含map和set如果只有key&#xff0c;沒有伴隨數據value&#xff0c;可以使用HashSet結構(C stl set)如果擁有key&#xff0c;擁有伴隨數據value&#xff0c;可以使用HashMap結構(C stl map)有無伴隨數據是Hashmap和Hashset的唯一區別…

中科大 計算機網絡1 課程主要內容大概介紹

B站課程 課程主要內容 1&#xff09; 支撐Web應用的http協議 支撐FTP應用的ftp協議 電子郵件發送協議主要是SMTP,收件協議主要是POP3和IMAP 傳輸層協議&#xff1a;UDP&#xff08;用戶數據包協議&#xff09;&#xff0c;TCP&#xff08;傳輸控制協議&#xff09; 2&#x…

算法題 如何找到數組中重復的數字

面試題3 數組中重復的數字 題 目 &#xff1a;找出數組中重復的數字。在一個長度為n的數組里的所有數字都在0 ~ n-1的范圍內。數組中某些數字是重復的&#xff0c;但不知道有幾個數字重復了&#xff0c;也不知道每個數字重復了幾次。請找出數組中任意一個重復的數字。例如&…

數學建模5 代碼論文降重 Excel表處理數據

代碼降重 1&#xff09;在代碼中加入自己的注釋 2&#xff09;替換變量名&#xff0c;a->jude 3&#xff09;代碼中英文使用很小的字母&#xff0c;再顏色透明化&#xff08;慎用&#xff09; 文章降重 1&#xff09;模型介紹&#xff0c;優缺點等網上容易查到的內容自己…

C++ Map簡單介紹 ,比如添加元素、刪除元素和打印元素

介紹 map是一種鍵值對容器&#xff0c;第一個數值為關鍵字&#xff08;key&#xff09;&#xff0c;第二個數值為該元素對應的出現的次數。如果是map&#xff0c;key只會出現一次&#xff0c;如果是unordered_map&#xff0c;無此限制。此外&#xff0c;map會對元素進行排序&a…

Python學習1 基礎語法 數據類型 計算機基礎

Python的重要性 python就業方向 Python的歷史 python創造于1989年&#xff0c;荷蘭人吉多.范羅蘇姆 現在是Python3版本 09 Python的特點 1&#xff09;跨平臺 2&#xff09;解釋型語言 3&#xff09;交互式 4&#xff09;面向對象&#xff1a;一切皆對象 5&#xff09;具有一…

算法考題 替換空格

參考鏈接 letcode官網題目地址 題目要求&#xff1a; 請實現一個函數&#xff0c;把字符串 s 中的每個空格替換成"%20"。示例 1&#xff1a; 輸入&#xff1a;s "We are happy." 輸出&#xff1a;"We%20are%20happy." 來源&#xff1a;力扣&a…

Python學習2 條件判斷語句if,循環語句for while

順序&#xff0c;分支&#xff0c;循環結構 條件判斷語句if 1&#xff09;if…else… 2) if…elif…else 注意&#xff1a; 1&#xff09;python中不支持switch…case語句 2&#xff09;注意縮進&#xff01; 3&#xff09;區間范圍內允許連續比較&#xff1a; if 1<2<…