Chaos is a ladder|

West11

园龄:11个月粉丝:1关注:1

整数规划

Matlab求解函数

intcon = [1,2,……];//表示哪些变量整形
[x, fvalue] = intlinprog(f, intcon, A, b, Aeq, beq, lb, ub);
%f为函数,intcon为整数的变量,A, b 为整数约束,Aeq,beq为等式约束, lb, ub 为变量上下限约束
%x is the value of variable , fvalue is the extreme value.

特殊:01规划

01指派,01背包:

  • 01指派:多目标,先选后做,双下标
  • 01背包:单目标,单下标

蒙特卡洛:计算机模拟解法

计算机暴力求解

上机实例

EX : 现要在A1, A2, A3,… , A8这8个小区建学校,预计有B1,B2等6个地点。

B1可覆盖A1, A5, A7

B2可覆盖A1, A2, A5, A8

B3 A1, A3, A5

B4 A2, A4, A8

B5 A3, A6

B6 A4, A6, A8

如图所示,

校址及覆盖小区

可用 xi 表示 Bi 学校是否建立,于是有目标 mini=16xi.

如A1区域,B1,B2,B3只要建一所就能覆盖,所以x1+x2+x3>=1.

综上,约束可写为

添加图片注释,不超过 140 字(可选)

matlab代码:

clear;clc;
n = 10000;%模拟次数
set_min = + Inf;% 最小建校个数,初始无穷大
set_x=0;%具体在哪建校
for i=1:n
   x = randi([0,1],6,1);%生成6行1列,0到1的数
   if((x(1) + x(2) + x(3) >= 1) & (x(4) + x(6) >= 1) & (x(3) + x(6) >=1) & (x(2) + x(4)>= 1)% (x(5) + x(6) >=1) & (x(1) >= 1)&(x(2)+x(4)+x(6) >= 1))
      sum_x = sum(x);
      if(sum_x<set_min)
           set_x = x;
      end
   end
end

结果有多个解, 最少建三个学校。

本文作者:West11

本文链接:https://www.cnblogs.com/cxy1114blog/p/18288094

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   West11  阅读(5)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起