数学建模 分支限界算法求解整数规划原理以及编程实现

引入

线性规划问题(松弛问题)
在这里插入图片描述
图解法:
使用图解法求出最优解,再使用四舍五入求出的整数解不满足条件
在这里插入图片描述
完全枚举法(穷举法):找出集合内所有满足条件的整数点,再带入不等式中,看是否有最优解
在这里插入图片描述

分支限界法

说明:
松弛问题:线性规划问题
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.mzph.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;具有一…