數學建模 分支限界算法求解整數規劃原理以及編程實現

引入

線性規劃問題(松弛問題)
在這里插入圖片描述
圖解法:
使用圖解法求出最優解,再使用四舍五入求出的整數解不滿足條件
在這里插入圖片描述
完全枚舉法(窮舉法):找出集合內所有滿足條件的整數點,再帶入不等式中,看是否有最優解
在這里插入圖片描述

分支限界法

說明:
松弛問題:線性規劃問題
ILP:整數規劃,在線性規劃的基礎上對決策變量進行取整
所以線性規劃無可行解則整數規劃也無可行解

增加約束條件,一個個來,一次增加一個
對原始結果進行向上取整 [4.6]=5
對原始結果進行向下取整 [4.6]=4
在這里插入圖片描述
流程:
如果添加完約束之后仍然沒有找到整數解,那么此時分支限界法已經不能解決此問題了
在這里插入圖片描述

案例

整數規劃的最優解只是針對決策變量x的,與目標值Z無關
所以x1=4;x2=1;z=14.3(是整數規劃的最優解)
1)當增加了x1<=3的條件之后,得出的結果中出現了非整數x2=2.67;所以此時還需要對x2向下取整與向上取整,看結果對比

在這里插入圖片描述
判斷:
得到目標值高的先進行分支
在這里插入圖片描述

matlab代碼

branchbound.m

function [newx,newfval,status,newbound] = branchbound(f,A,B,I,x,fval,bound,Aeq,Beq,lb,ub,e)% 分支定界法求解整數規劃
% f,A,B,Aeq,Beq,lb,ub與線性規劃相同
% I為整數限制變量的向量
% x為初始解,fval為初始值options = optimset('display','off');
[x0,fval0,status0]=linprog(f,A,B,Aeq,Beq,lb,ub,[],options);%遞歸中的最終退出條件
%無解或者解比現有上界大則返回原解
if status0 <= 0 || fval0 >= boundnewx = x;newfval = fval;newbound = bound;status = status0;return;
end%是否為整數解,如果是整數解則返回
intindex = find(abs(x0(I) - round(x0(I))) > e);
if isempty(intindex) %判斷是否為空值newx(I) = round(x0(I));newfval = fval0;newbound = fval0;status = 1;return;
end%當有非整可行解時,則進行分支求解
%此時必定會有整數解或空解
%找到第一個不滿足整數要求的變量
n = I(intindex(1));
addA = zeros(1,length(f));
addA(n) = 1;
%構造第一個分支 x<=floor(x(n))
A = [A;addA];
B = [B,floor(x(n))];%向下取整
[x1,fval1,status1,bound1] = branchbound(f,A,B,I,x0,fval0,bound,Aeq,Beq,lb,ub,e);
A(end,:) = [];
B(:,end) = [];
%解得第一個分支,若為更優解則替換,若不是則保持原狀status = status1;
if status1 > 0 && bound1 < boundnewx = x1;newfval = fval1;bound = fval1;newbound = bound1;
elsenewx = x0;newfval = fval0;newbound = bound;
end%構造第二分支
A = [A;-addA];
B = [B,-ceil(x(n))];%向上取整
[x2,fval2,status2,bound2] = branchbound(f,A,B,I,x0,fval0,bound,Aeq,Beq,lb,ub,e);    
A(end,:) = [];
B(:,end) = [];%解得第二分支,并與第一分支做比較,如果更優則替換
if status2 > 0 && bound2 < boundstatus = status2;newx = x2;newfval = fval2;newbound = bound2;
end

intprog.m

function [x,fval,status] = intprog(f,A,B,I,Aeq,Beq,lb,ub,e)
%整數規劃求解函數 intprog()
%     其中 f為目標函數向量
%     A和B為不等式約束 Aeq與Beq為等式約束
%     I為整數約束
%     lb與ub分別為變量下界與上界
%     x為最優解,fval為最優值
%例子:
%        maximize 20 x1 + 10 x2 
%        S.T.
% 	             5 x1 + 4 x2 <=24
%                2 x1 + 5 x2 <=13
%                   x1, x2 >=0 
%                   x1, x2是整數
% f=[-20, -10];
% A=[ 5  4; 2 5];
% B=[24; 13];
% lb=[0 0];
% ub=[inf inf];
% I=[1,2];
% e=0.000001;
% [x v s]= IP(f,A,B,I,[],[],lb,ub,,e)
% x = 4     1  v = -90.0000   s = 1% 控制輸入參數
if nargin < 9, e = 0.00001;if nargin < 8, ub = []; if nargin < 7, lb = []; if nargin < 6, Beq = []; if nargin < 5, Aeq = [];if nargin < 4, I = [1:length(f)];end, end, end, end, end, end%求解整數規劃對應的線性規劃,判斷是否有解
options = optimset('display','off');
[x0,fval0,exitflag] = linprog(f,A,B,Aeq,Beq,lb,ub,[],options);
if exitflag < 0disp('沒有合適整數解');x = x0;fval = fval0;status = exitflag;return;
else%采用分支定界法求解bound = inf;[x,fval,status] = branchbound(f,A,B,I,x0,fval0,bound,Aeq,Beq,lb,ub,e);
end

test.m

%例子1
% f = [-40 -90];%A = [9 7;7 20];%B = [56 70];
% lb = [0 0]';
%例子2f = [-20 -10];A = [5 4;2 5];B = [24 13];lb = [0 0];[x,fval,status] = intprog(f,A,B,[1 2],[],[],lb)

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

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

相關文章

java Map統計字符串中元素的數量

public int firstUniqChar(String s) {Map<Character, Integer> map new HashMap();char[] chars s.toCharArray();//先統計每個字符的數量for (char ch : chars) {map.put(ch, map.getOrDefault(ch, 0) 1);}//然后在遍歷字符串s中的字符&#xff0c;如果出現次數是1就…

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

基本思想 松弛問題:線性規劃 割掉一塊全部都是小數的區域(這一部分取不到整數) 案例 1)橫坐標x1,縱坐標x2 2)藍色小三角形的區域:x2:(1,7/4) x1:(0,3/4) 這塊區域,x1與x2完全取不到整數,所以直接切去 所以,此時取值范圍變化了: x2<1把此約束條件帶入,得到x11,x21,z2 3…

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;具有一…