数学建模 割平面算法求解整数规划基本原理与编程实现

基本思想

松弛问题:线性规划
割掉一块全部都是小数的区域(这一部分取不到整数)
在这里插入图片描述

案例

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.mzph.cn/news/446505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模 匈牙利算法求解整数规划基本原理与编程实现

投资问题(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(在编…

数学建模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)重要…

数学建模4 论文写作排版和技巧

文字 标题一&#xff1a;四号黑体 标题二、三&#xff1a;小四号黑体 正文&#xff1a;宋体小四 行距1.5 标题前后空0.5行 英文和数字使用Times New Roman 小四&#xff08;包括表格中的内 表头在表格上方&#xff0c;需写成“表1 什么什么表”黑体小五加粗、居中 图名在图下…

中科大 计算机网络1 课程主要内容大概介绍

B站课程 课程主要内容 1&#xff09; 支撑Web应用的http协议 支撑FTP应用的ftp协议 电子邮件发送协议主要是SMTP,收件协议主要是POP3和IMAP 传输层协议&#xff1a;UDP&#xff08;用户数据包协议&#xff09;&#xff0c;TCP&#xff08;传输控制协议&#xff09; 2&#x…

数学建模5 代码论文降重 Excel表处理数据

代码降重 1&#xff09;在代码中加入自己的注释 2&#xff09;替换变量名&#xff0c;a->jude 3&#xff09;代码中英文使用很小的字母&#xff0c;再颜色透明化&#xff08;慎用&#xff09; 文章降重 1&#xff09;模型介绍&#xff0c;优缺点等网上容易查到的内容自己…

Python学习1 基础语法 数据类型 计算机基础

Python的重要性 python就业方向 Python的历史 python创造于1989年&#xff0c;荷兰人吉多.范罗苏姆 现在是Python3版本 09 Python的特点 1&#xff09;跨平台 2&#xff09;解释型语言 3&#xff09;交互式 4&#xff09;面向对象&#xff1a;一切皆对象 5&#xff09;具有一…

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<…

使用VS2019创建项目,添加文件和库地址

1&#xff0c;创建项目的类型很重要&#xff0c;fisherman服务器密码机使用C语言进行开发&#xff0c;只可以使用控制台应用 将需要的头文件拷贝到新建的工程里面 然后&#xff0c;打开解决方案资源管理器&#xff0c;点击添加&#xff0c;添加现有项&#xff0c;选中拷贝的头…

中科大 计算机网络2 什么是互联网

概论 互联网 1&#xff09;网络–包括节点和边&#xff0c;与大小无关&#xff0c;如蜘蛛网&#xff0c;大脑神经元。。 下图的网络是一样的 2&#xff09;计算机网络 联网的计算机所构成的系统 包括主机节点&#xff08;笔记本&#xff0c;ipad,手机&#xff0c;联网的冰箱等…

虚拟机下Ubuntu配置IP地址和网段

服务器密码机的地址是172.27.120.99 ubuntu系统的IP地址是192.168.133.138&#xff0c;使用net方式和主机共享网络。现需要修改ip地址 第一步&#xff0c;net方式是不对的&#xff0c;需要选择桥接方式&#xff0c;复制物理连接状态 然后修改主机的物理连接&#xff0c;选择搜…

王道考研 计算机网络1 计算机网络概念,组成,功能和分类

计算机网络概念&#xff0c;组成&#xff0c;功能和分类 怎样学习计算机网络 计算机网络概念 1&#xff09;网络和计算机网络区别 网络包含计算机网络&#xff08;是通信技术和计算机技术相结合的产物&#xff09; 2&#xff09;计算机网络的概念 分散的&#xff1a;指地理位…

王道考研 计算机网络2 标准化工作

标准化工作 要实现不同厂商的硬软件之间相互连通&#xff0c;必须遵从统一的标准 标准的分类&#xff1a; 法定标准&#xff1a;国内外 RFC请求评论 RFC请求评论–因特网标准 是一个因特网标准就一定是RFC形式&#xff0c;但不是所有的RFC都是因特网标准 之前的阶段&#…

二叉搜索树判定

leetcode的原文链接树的定义C版本 需要给每一个节点的数值划分范围若任意节点的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b;任意节点的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结点的值&#xff1b;任意节点的左、右子树…

王道考研 计算机网络3 速率相关的性能指标

速率 指快慢 比特&#xff1a;1/0&#xff08;1位比特&#xff09; 速率&#xff1a;单位换算1000倍&#xff08;小写b&#xff09;&#xff0c;如&#xff0c;b/s比特每秒&#xff1b;kb/s千比特每秒 存储容量&#xff1a;单位换算1024倍(大写B)&#xff0c;如B字节&#xf…