matlab 中0-1规划

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 中0-1规划相关的知识,希望对你有一定的参考价值。

目标函数:min x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11+x12+x13+x14+x15+x16+x17+x18+x19+x20+x21+x22+x23+x24+x25+x26+x27+x28+x29+x30+x31+x32+x33+x34+x35+x36+x37+x38+x39+x40+x41+x42+x43+x44+x45+x46+x47+x48+x49+x50

约束条件:65*x1+100*x2+48*x3+48*x4+48*x5+48*x6+48*x7+48*x8+48*x9+48*x10+48*x11+48*x12+48*x13+48*x14+48*x15+48*x16+48*x17+100*x18+65*x19+65*x20+65*x21+80*x22+48*x23+48*x24+48*x25+72*x26+49*x27+72*x28+71*x29+72*x30+93*x31+93*x32+108*x33+104*x34+78*x35+78*x36+60*x37+60*x38+107*x39+72*x40+72*x41+50*x42+50*x43+55*x44+55*x45+63*x46+97*x47+97*x48+99*x49+99*x50>=3021
其中:x1至x50等于0或1!
求大虾解救一下! 跪谢!

截图如下:

参考技术A [x,val]=bintprog(ones(1,50),-[65 100 48*ones(1,15) 100 65 65 65 80 48 48 48 72 49 72 71 72 93 93 108 104 78 78 60 60 107 72 72 50 50 55 55 63 97 97 99 99],-3021)
但好像解不出来,想想也是啊,2的50次方啊,天文数字啊。
给一个可能的近似解
A=[65 100 48*ones(1,15) 100 65 65 65 80 48 48 48 72 49 72 71 72 93 93 108 104 78 78 60 60 107 72 72 50 50 55 55 63 97 97 99 99]
[a,b]=sort(A,'descend');
val=cumsum(a);
c=find(val>=3021,1);
x=zeros(1,50);
x(b(1:c))=1
val=sum(x)

路径规划基于matlab FMM快速行进法船舶路径规划含Matlab源码 2291期

⛄一、FMM简介

FMM是一种基于熵条件逆风策略求解Eikonal方程的高效数值方法,它在矩形直角格网中求解Eikonal方程的复杂度为O(Nlog N),其中N为格网总数。在一个二维规划空间中,两点之间的最优路径p满足最小代价要求,其中代价C是一个各向异性场,它与位置和方向都有关。
假定有势函数u(x),x表示位置,它满足Eikonal方程:

u(x)按最陡梯度下降的轮廓线就是最优路径,边界条件u(xgoal)=0作为默认已知。当C=1,方程的解就是起点到目标点的欧式距离,它可以简单的通过构造具有单位速度的扩展边界曲线得到。然而,若C不等于1,边界曲线会和自己交叉形成多值的“燕尾解”。熵条件解(没有多值“燕尾”)通常采用粘滞解理论在Eiknoal方程的右边加上平滑项以去除演化边界曲线的“尖角”。添加平滑项后Eiknoal方程形如:

当ε→0时,这种平滑能很好地消除多值“燕尾”现象。FMM是能够自动抽取粘滞解的数值方法,它存在Tsitsiklis算法和Sethian算法两种形式,前者常用于处理可能存在迂回线路的情况,也是本文演化模型FMM实现的基础。

经典的Eiknoal方程一阶求解采用Gudunov逆风策略,该数值方法收敛于粘滞解[7]。在航迹规划中最小代价求解问题的Eiknoal方程通常写成如下形式:

其中T为时间距离函数,τ为扩展代价函数,其Gudunov近似策略为:

通过上述方程和近似计算策略得到时间距离函数分布图,在此基础上利用最陡下降法反向跟踪抽取出发点和目标点之间的最短路径。

⛄二、部分源代码

clc
clear
close all
load mat_T.mat
load map.mat
dbstop if error
tic
% %% 输入起点与终点
% % 起点
% % start = input("请输入起点: ");
% 终点
% goal=input("请输入终点: ");
start=[50,20];
goal=[150,190];

%% 计算速度矩阵V与时间矩阵T
mat_V=ones(size(map));

mat_T=ones(size(map))*inf;
for i=1:size(map,1)
for j=1:size(map,2)
if map(i,j)==0
mat_T(i,j)=NaN;
end
end
end

%初始化mat_T(start)为0
mat_T(goal(1),goal(2))=0;
%初始化Far和Known
Far=[];
Known=[];
for i=1:size(map,1)
for j=1:size(map,2)
if igoal(1)&&jgoal(2)
Known=[i,j];
else
Far=[Far;i,j];
end
end
end

⛄三、运行结果


⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]李时东,蔡超,丁明跃.一种航迹约束演化新模型及其FMM实现[J].系统仿真学报. 2011,23(05)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

以上是关于matlab 中0-1规划的主要内容,如果未能解决你的问题,请参考以下文章

matlab 中0-1规划

matlab编程:0-1规划问题:向高手求程序代码。

用matlab求解整数规划双角标问题

如何用MATLAB求解0-1整数规划?

matlab整数规划程序

如何利用matlab cvx求解0-1整数规划