整数规划

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

如图所示,

校址及覆盖小区

可用 \(x_i\) 表示 \(B_i\) 学校是否建立,于是有目标 \(min\sum_{i=1}^6x_i.\)

如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

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

posted @ 2024-07-07 00:11  West11  阅读(34)  评论(0)    收藏  举报