数模整数规划实例

非线性规划习题

之前的非线性规划的练习题


  1. 题目
    1.
    数模整数规划实例_第1张图片

    2.
    数模整数规划实例_第2张图片

    3.
    数模整数规划实例_第3张图片

  2. 解答

    1. 这里利用y = x1*x2 可以去进行替换
      并且利用x的取值的特性可以得到新的条件:

      x1 + x2 - 1 <= y <= x1
      x1 + x2 - 1 <= y <= x2
      y = 0 或 1

      和之前的约束条件形成一个3个变量的线性的0-1规划问题

    2. 这是一个线性的0-1规划问题
      设置备选校址对应的为:x1,x2,x3,x4,x5,x6
      对应着8个居民小区会有这8个不同条件的约束
      如第一个:x1 + x2 + x3 >= 1
      以此类推可以得出:

      f = [1,1,1,1,1,1];
      Aeq = [-1 -1 -1 0 0 0; 0 -1 0 -1 0 0;0 0 -1 0 -1 0; 0 0 0 -1 0 0; -1 -1 -1 0 0 0;0 0 0 0 -1 -1;-1 0 0 0 0 0;0 -1 0 -1 0 -1];
      beq = [-1;-1;-1;-1;-1;-1;-1;-1];
      [x,y] = intlinprog(f,ones(6,1),Aeq,beq,[],[],zeros(6,1));
      y
      x = 1 0 0 1 1
    3. 这里就是一个24个不同变量分配的问题,典型的机器-工人分配问题,直接用相关算法即可;
      其中link集合中x表示所求企业分配,c表示分配利润
      @for为约束条件

      model:
      sets:
      machine/1..6/;
      company/1..4/;
      link(machine,company):c,x;
      endsets
      
      data:
      c = 4 2 3 4
      6 4 5 5
      7 6 7 6
      7 8 8 6
      7 9 8 6
      7 10 8 6;
      enddata
      
      max = @sum(link:c*x);
      @for(company(j):@sum(machine(i):x(i,j)) >= 1);
      @for(machine(i):@sum(company(j):x(i,j)) = 1);
      @for(link:@bin(x));
      end

你可能感兴趣的:(数模竞赛)