《数学建模》--- 2014年数学建模竞赛E题

 目录

(1)、使用matlab将每种轿用车的满载方案求出来

            1 - 1 型 (75种)

            1 - 2 型 (126种)

(2)、1、2、3 问通用代码

(3)、第四问(先用上面你的通用代码计算最少车辆数,再贪心优先到达最远的地点)

           以下是贪心部分

           a

           b

           c

           d

(4)、第五问(优化处理数据, 然后用第四问方法, 无标准答案)


使用matlab将每种轿用车的满载方案求出来

1 - 1 型 (75种)

model:

!1-1;

sets:
  jiao/1..3/: l, ms, o;
  n/1..100/: u;
  m(n, jiao): a, b, c, ca, cb;
endsets

data:
  l = 4.71, 3.715, 4.73;
  d = 19;
  o = 1, 1, 1;
  !@ole(1 - 1.xlsx, a1: c75) = c;
  !@ole(1 - 1.xlsx, e1: g75) = ca;
  @ole(1 - 1.xlsx, i1: k75) = cb;
enddata

!@for (jiao(i): ms(i) = @floor(d / l(i)));

calc:
@for (jiao(i): ms(i) = @floor(d / l(i)));


@for (n(i)| i #le# (ms(1) + 1):

  @for (n(j)| j #le# (ms(2) + 1) #and# ((i - 1) * l(1) + (j - 1) * l(2) - 0.1) #le# d:

      e = @if ((d - (i - 1) * l(1) - (j - 1) * l(2) + 0.1) #lt# 3.715, 1, 0);

      a(o(1), 1) = @if (e #eq# 1, i - 1, a(o(1), 1));
      a(o(1), 2) = @if (e #eq# 1, j - 1, a(o(1), 2));
      a(o(1), 3) = 0;
      o(1) = @if (e #eq# 1, o(1) + 1, o(1));


    );
  
);

@for (n(i)| i #le# ms(1) + 1:
  
  @for (n(j)| j #le# ms(2) + 1 #and# (i - 1) * l(1) + (j - 1) * l(2) - 0.1 #le# d:
    
    @for(n(k)| k #le# ms(3) + 1 #and# (i -  1) * l(1) + (j - 1) * l(2) + (k - 1) * l(3) - 0.1 #le# d:

      e = @if (d - (i - 1) * l(1) - (j - 1) * l(2) - (k - 1) * l(3) + 0.1 #lt# 3.715, 1, 0);

      b(o(2), 1) = @if (e #eq# 1, i - 1, b(o(2), 1));
      b(o(2), 2) = @if (e #eq# 1, j - 1, b(o(2), 2));
      b(o(2), 3) = @if (e #eq# 1, k - 1, b(o(2), 3));
      o(2) = @if (e #eq# 1, o(2) + 1, o(2));

    );
    
  );
  
);

@for (n(i)| i #lt# o(1):
  @for (n(j)| j #lt# o(2):
    c(o(3), 1) = a(i, 1) + b(j, 1);
    c(o(3), 2) = a(i, 2) + b(j, 2);
    c(o(3), 3) = a(i, 3) + b(j, 3);
    ca(o(3), 1) = a(i, 1);
    ca(o(3), 2) = a(i, 2);
    ca(o(3), 3) = a(i, 3);
    cb(o(3), 1) = b(j, 1);
    cb(o(3), 2) = b(j, 2);
    cb(o(3), 3) = b(j, 3);
    o(3) = o(3) + 1;
  );
);



endcalc


end

1 - 2 型 (126种)

model:

!1-2;

sets:
  jiao/1..3/: l, ms, o;
  n/1..200/: u;
  m(n, jiao): a, b, c, ca, cb;
endsets

data:
  l = 4.71, 3.715, 4.73;
  d = 24.3;
  o = 1, 1, 1;
  !@ole(1 - 2.xlsx, a1: c126) = c;
  !@ole(1 - 2.xlsx, e1: g126) = ca;
  @ole(1 - 2.xlsx, i1: k126) = cb;

enddata

calc:
@for (jiao(i): ms(i) = @floor(d / l(i)));



@for (n(i)| i #le# (ms(1) + 1):

  @for (n(j)| j #le# (ms(2) + 1) #and# ((i - 1) * l(1) + (j - 1) * l(2)) - 0.1 #le# d:

      e = @if ((d - (i - 1) * l(1) - (j - 1) * l(2) + 0.1) #lt# 3.715, 1, 0);

      a(o(1), 1) = @if (e #eq# 1, 2 * (i - 1), a(o(1), 1));
      a(o(1), 2) = @if (e #eq# 1, 2 * (j - 1), a(o(1), 2));
      a(o(1), 3) = 0;
      o(1) = @if (e #eq# 1, o(1) + 1, o(1));


    );
  
);

@for (n(i)| i #le# ms(1) + 1:
  
  @for (n(j)| j #le# ms(2) + 1 #and# (i - 1) * l(1) + (j - 1) * l(2) - 0.1 #le# d:
    
    @for(n(k)| k #le# ms(3) + 1 #and# (i -  1) * l(1) + (j - 1) * l(2) + (k - 1) * l(3) - 0.1 #le# d:

      e = @if (d - (i - 1) * l(1) - (j - 1) * l(2) - (k - 1) * l(3) + 0.1 #lt# 3.715, 1, 0);

      b(o(2), 1) = @if (e #eq# 1, i - 1, b(o(2), 1));
      b(o(2), 2) = @if (e #eq# 1, j - 1, b(o(2), 2));
      b(o(2), 3) = @if (e #eq# 1, k - 1, b(o(2), 3));
      o(2) = @if (e #eq# 1, o(2) + 1, o(2));

    );
    
  );
  
);

@for (n(i)| i #lt# o(1):
  @for (n(j)| j #lt# o(2):
    c(o(3), 1) = a(i, 1) + b(j, 1);
    c(o(3), 2) = a(i, 2) + b(j, 2);
    c(o(3), 3) = a(i, 3) + b(j, 3);
    !@write(c(o(3), 1), ' ', c(o(3), 2), ' ', c(o(3), 3), ' ' );
    ca(o(3), 1) = a(i, 1);
    ca(o(3), 2) = a(i, 2);
    ca(o(3), 3) = a(i, 3);
    cb(o(3), 1) = b(j, 1);
    cb(o(3), 2) = b(j, 2);
    cb(o(3), 3) = b(j, 3);
    o(3) = o(3) + 1;
  );
);

endcalc


end

1、2、3 问通用代码

model:


sets:
  n/1..75/: a1, b1, c1, w1, a1s, a1x, b1s, b1x, c1s, c1x;
  m/1..126/: a2, b2, c2, w2, a2s, a2x, b2s, b2x, c2s, c2x;
endsets

data:
  a1, b1, c1 = @ole(1 - 1.xlsx, a1: a75, b1: b75, c1:c75);
  a1s, b1s, c1s = @ole(1 - 1.xlsx, e1: e75, f1: f75, g1:g75);
  a1x, b1x, c1x = @ole(1 - 1.xlsx, i1: i75, j1: j75, k1:k75);
  a2, b2, c2 = @ole(1 - 2.xlsx, a1: a126, b1: b126, c1:c126);
  a2s, b2s, c2s = @ole(1 - 2.xlsx, e1: e126, f1: f126, g1:g126);
  a2x, b2x, c2x = @ole(1 - 2.xlsx, i1: i126, j1: j126, k1:k126);
enddata

submodel obj:
  xa = 166;
  xb = 78;
  xc = 0;
  @sum (n(i): a1(i) * w1(i)) + @sum (m(j): a2(j) * w2(j)) >= xa;
  @sum (n(i): b1(i) * w1(i)) + @sum (m(j): b2(j) * w2(j)) >= xb;
  @sum (n(i): c1(i) * w1(i)) + @sum (m(j): c2(j) * w2(j)) >= xc;
  @sum (n(i): w1(i)) * 0.2 >= @sum (m(j): w2(j));
  @for (n: @gin(w1));
  @for (m: @gin(w2));
  w = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st1:
  min = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
  o = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st2:
  min = @sum (m(j): w2(j));
endsubmodel

calc:
  @solve(obj, st1);
  w = o;
  @solve(obj, st2);
  @write ('1 - 1型:', @newline(1) );
  @for (n(i):
    @ifc (w1(i) #gt# 0:
      @write (w1(i), ' , ', a1(i), ' ', b1(i), ' ', c1(i), ' , ', a1s(i), ' ', b1s(i), ' ', c1s(i), ' , ', a1x(i), ' ', b1x(i), ' ', c1x(i), @newline(1));
    );
  );
  @write ('1 - 2型:', @newline(1) );
  @for (m(i):
    @ifc (w2(i) #gt# 0:
      @write (w2(i), ' , ', a2(i), ' ', b2(i), ' ', c2(i), ' , ', a2s(i), ' ', b2s(i), ' ', c2s(i), ' , ', a2x(i), ' ', b2x(i), ' ', c2x(i), @newline(1));
    );
  );


endcalc



end

问题1 - 1数量1 - 2数量总数量
116218
212113
325530

第四问(先用上面你的通用代码计算最少车辆数,再贪心优先到达最远的地点)

以下是贪心部分

a

model:


sets:
  n/1..75/: a1, b1, c1, w1, a1s, a1x, b1s, b1x, c1s, c1x;
  m/1..126/: a2, b2, c2, w2, a2s, a2x, b2s, b2x, c2s, c2x;
endsets

data:
  a1, b1, c1 = @ole(1 - 1.xlsx, a1: a75, b1: b75, c1:c75);
  a1s, b1s, c1s = @ole(1 - 1.xlsx, e1: e75, f1: f75, g1:g75);
  a1x, b1x, c1x = @ole(1 - 1.xlsx, i1: i75, j1: j75, k1:k75);
  a2, b2, c2 = @ole(1 - 2.xlsx, a1: a126, b1: b126, c1:c126);
  a2s, b2s, c2s = @ole(1 - 2.xlsx, e1: e126, f1: f126, g1:g126);
  a2x, b2x, c2x = @ole(1 - 2.xlsx, i1: i126, j1: j126, k1:k126);
enddata

submodel obj:
  xa = 42;
  xb = 31;
  xc = 0;
  
  s1 = 21;
  s2 = 4;

  @sum (n(i): a1(i) * w1(i)) + @sum (m(j): a2(j) * w2(j)) >= xa;
  @sum (n(i): b1(i) * w1(i)) + @sum (m(j): b2(j) * w2(j)) >= xb;
  @sum (n(i): c1(i) * w1(i)) + @sum (m(j): c2(j) * w2(j)) >= xc;
  
  @sum (n(i): w1(i)) <= s1;
  @sum (m(i): w2(i)) <= s2;

  
  @for (n: @gin(w1));
  @for (m: @gin(w2));
  w = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st1:
  min = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
  o = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st2:
  max = @sum (m(j): w2(j));
endsubmodel

calc:
  @solve(obj, st1);
  w = o;
  @solve(obj, st2);
  @write ('1 - 1型:', @newline(1) );
  @for (n(i):
    @ifc (w1(i) #gt# 0:
      @write (i , ' ', w1(i), ' , ', a1(i), ' ', b1(i), ' ', c1(i), ' , ', a1s(i), ' ', b1s(i), ' ', c1s(i), ' , ', a1x(i), ' ', b1x(i), ' ', c1x(i), @newline(1));
    );
  );
  @write ('1 - 2型:', @newline(1) );
  @for (m(i):
    @ifc (w2(i) #gt# 0:
      @write (i, ' ', w2(i), ' , ', a2(i), ' ', b2(i), ' ', c2(i), ' , ', a2s(i), ' ', b2s(i), ' ', c2s(i), ' , ', a2x(i), ' ', b2x(i), ' ', c2x(i), @newline(1));
    );
  );


endcalc



end


b

model:


sets:
  n/1..75/: a1, b1, c1, w1, a1s, a1x, b1s, b1x, c1s, c1x;
  m/1..126/: a2, b2, c2, w2, a2s, a2x, b2s, b2x, c2s, c2x;
endsets

data:
  a1, b1, c1 = @ole(1 - 1.xlsx, a1: a75, b1: b75, c1:c75);
  a1s, b1s, c1s = @ole(1 - 1.xlsx, e1: e75, f1: f75, g1:g75);
  a1x, b1x, c1x = @ole(1 - 1.xlsx, i1: i75, j1: j75, k1:k75);
  a2, b2, c2 = @ole(1 - 2.xlsx, a1: a126, b1: b126, c1:c126);
  a2s, b2s, c2s = @ole(1 - 2.xlsx, e1: e126, f1: f126, g1:g126);
  a2x, b2x, c2x = @ole(1 - 2.xlsx, i1: i126, j1: j126, k1:k126);
enddata

submodel obj:
  xa = 48;
  xb = 0;
  xc = 0;
  
  s1 = 20;
  s2 = 0;

  @sum (n(i): a1(i) * w1(i)) + @sum (m(j): a2(j) * w2(j)) >= xa;
  @sum (n(i): b1(i) * w1(i)) + @sum (m(j): b2(j) * w2(j)) >= xb;
  @sum (n(i): c1(i) * w1(i)) + @sum (m(j): c2(j) * w2(j)) >= xc;
  
  @sum (n(i): w1(i)) <= s1;
  @sum (m(i): w2(i)) <= s2;

  
  @for (n: @gin(w1));
  @for (m: @gin(w2));
  w = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st1:
  min = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
  o = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st2:
  max = @sum (n(i): w1(i) * a1(i));
endsubmodel


calc:
  @solve(obj, st1);
  w = o;
  @solve(obj, st2);
  @write ('1 - 1型:', @newline(1) );
  @for (n(i):
    @ifc (w1(i) #gt# 0:
      @write (i , ' ', w1(i), ' , ', a1(i), ' ', b1(i), ' ', c1(i), ' , ', a1s(i), ' ', b1s(i), ' ', c1s(i), ' , ', a1x(i), ' ', b1x(i), ' ', c1x(i), @newline(1));
    );
  );
  @write ('1 - 2型:', @newline(1) );
  @for (m(i):
    @ifc (w2(i) #gt# 0:
      @write (i, ' ', w2(i), ' , ', a2(i), ' ', b2(i), ' ', c2(i), ' , ', a2s(i), ' ', b2s(i), ' ', c2s(i), ' , ', a2x(i), ' ', b2x(i), ' ', c2x(i), @newline(1));
    );
  );


endcalc



end



c

model:


sets:
  n/1..75/: a1, b1, c1, w1, a1s, a1x, b1s, b1x, c1s, c1x;
  m/1..126/: a2, b2, c2, w2, a2s, a2x, b2s, b2x, c2s, c2x;
endsets

data:
  a1, b1, c1 = @ole(1 - 1.xlsx, a1: a75, b1: b75, c1:c75);
  a1s, b1s, c1s = @ole(1 - 1.xlsx, e1: e75, f1: f75, g1:g75);
  a1x, b1x, c1x = @ole(1 - 1.xlsx, i1: i75, j1: j75, k1:k75);
  a2, b2, c2 = @ole(1 - 2.xlsx, a1: a126, b1: b126, c1:c126);
  a2s, b2s, c2s = @ole(1 - 2.xlsx, e1: e126, f1: f126, g1:g126);
  a2x, b2x, c2x = @ole(1 - 2.xlsx, i1: i126, j1: j126, k1:k126);
enddata

submodel obj:
  xa = 33;
  xb = 46;
  xc = 0;
  
  s1 = 14;
  s2 = 0;

  @sum (n(i): a1(i) * w1(i)) + @sum (m(j): a2(j) * w2(j)) >= xa;
  @sum (n(i): b1(i) * w1(i)) + @sum (m(j): b2(j) * w2(j)) >= xb;
  @sum (n(i): c1(i) * w1(i)) + @sum (m(j): c2(j) * w2(j)) >= xc;
  
  @sum (n(i): w1(i)) <= s1;
  @sum (m(i): w2(i)) <= s2;

  
  @for (n: @gin(w1));
  @for (m: @gin(w2));
  w = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st1:
  min = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
  o = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st2:
  max = @sum (n(i): w1(i) * a1(i));
endsubmodel

calc:
  @solve(obj, st1);
  w = o;
  @solve(obj, st2);
  @write ('1 - 1型:', @newline(1) );
  @for (n(i):
    @ifc (w1(i) #gt# 0:
      @write (i , ' ', w1(i), ' , ', a1(i), ' ', b1(i), ' ', c1(i), ' , ', a1s(i), ' ', b1s(i), ' ', c1s(i), ' , ', a1x(i), ' ', b1x(i), ' ', c1x(i), @newline(1));
    );
  );
  @write ('1 - 2型:', @newline(1) );
  @for (m(i):
    @ifc (w2(i) #gt# 0:
      @write (i, ' ', w2(i), ' , ', a2(i), ' ', b2(i), ' ', c2(i), ' , ', a2s(i), ' ', b2s(i), ' ', c2s(i), ' , ', a2x(i), ' ', b2x(i), ' ', c2x(i), @newline(1));
    );
  );


endcalc



end




d

model:


sets:
  n/1..75/: a1, b1, c1, w1, a1s, a1x, b1s, b1x, c1s, c1x;
  m/1..126/: a2, b2, c2, w2, a2s, a2x, b2s, b2x, c2s, c2x;
endsets

data:
  a1, b1, c1 = @ole(1 - 1.xlsx, a1: a75, b1: b75, c1:c75);
  a1s, b1s, c1s = @ole(1 - 1.xlsx, e1: e75, f1: f75, g1:g75);
  a1x, b1x, c1x = @ole(1 - 1.xlsx, i1: i75, j1: j75, k1:k75);
  a2, b2, c2 = @ole(1 - 2.xlsx, a1: a126, b1: b126, c1:c126);
  a2s, b2s, c2s = @ole(1 - 2.xlsx, e1: e126, f1: f126, g1:g126);
  a2x, b2x, c2x = @ole(1 - 2.xlsx, i1: i126, j1: j126, k1:k126);
enddata

submodel obj:
  xa = 39;
  xb = 0;
  xc = 0;
  
  s1 = 5;
  s2 = 0;

  @sum (n(i): a1(i) * w1(i)) + @sum (m(j): a2(j) * w2(j)) >= xa;
  @sum (n(i): b1(i) * w1(i)) + @sum (m(j): b2(j) * w2(j)) >= xb;
  @sum (n(i): c1(i) * w1(i)) + @sum (m(j): c2(j) * w2(j)) >= xc;
  
  @sum (n(i): w1(i)) <= s1;
  @sum (m(i): w2(i)) <= s2;

  
  @for (n: @gin(w1));
  @for (m: @gin(w2));
  w = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st1:
  min = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
  o = @sum (n(i): w1(i)) + @sum (m(j): w2(j));
endsubmodel

submodel st2:
  max = @sum (n(i): w1(i) * a1(i));
endsubmodel


calc:
  @solve(obj, st1);
  w = o;
  @solve(obj, st2);
  @write ('1 - 1型:', @newline(1) );
  @for (n(i):
    @ifc (w1(i) #gt# 0:
      @write (i , ' ', w1(i), ' , ', a1(i), ' ', b1(i), ' ', c1(i), ' , ', a1s(i), ' ', b1s(i), ' ', c1s(i), ' , ', a1x(i), ' ', b1x(i), ' ', c1x(i), @newline(1));
    );
  );
  @write ('1 - 2型:', @newline(1) );
  @for (m(i):
    @ifc (w2(i) #gt# 0:
      @write (i, ' ', w2(i), ' , ', a2(i), ' ', b2(i), ' ', c2(i), ' , ', a2s(i), ' ', b2s(i), ' ', c2s(i), ' , ', a2x(i), ' ', b2x(i), ' ', c2x(i), @newline(1));
    );
  );


endcalc



end





第五问(优化处理数据, 然后用第四问方法, 无标准答案)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值