数学建模社区-数学中国

标题: 优化模型代码问题,大佬帮k'k [打印本页]

作者: Irving2    时间: 2021-1-5 15:27
标题: 优化模型代码问题,大佬帮k'k
题目在此:
1.png 2.png

\(model:
sets:
fact/1..7/ : x,t,w,y,n;
endsets

data:
!i = 1,2,3,4,5,6,7;
!n = 8+7+9+6+6+4+8;
n = 8,7,9,6,6,4,8;
t = 48.7,52.0,61.3,72.0,48.7,52.0,64.0;
w = 2000,3000,1000,500,4000,2000,1000;
enddata

@sum(fact(i) : t(i)*x(i)) < 1020 ;
@sum(fact(i) : t(i)*y(i)) < 1020 ;
!x(i)+y(i) <= n(i);
@for( fact(i): x(i)+y(i) < n(i) ) ; ! 证明每一批次的货都得小于 所拥有的货 ;
@sum(fact(i) : w(i)*x(i)) < 40000 ;
@sum(fact(i) : w(i)*y(i)) < 40000 ;
!@sum(fact(i) #and#  i #ge# 5: t(i)*y(i) ) < 302.7 ;
@sum(fact(i) | i #ge# 5 #and# i #le# 7 : t(i)*y(i) ) < 302.7 ;
min= (1020 - @sum(fact(i):x(i)*y(i)) ) + (1020 - @sum(fact(i):t(i)*y(i)) );
@for(fact(i)gin(x));
@for(fact(i)gin(y));
end\)
这个是老师给的答案


我自己尝试写的代码\(model:
sets:
fact/1..7/ : t,w,x,y,n ;
endsets
data:
n = 8,7,9,6,6,4,8;
t = 48.7,52.0,61.3,72.0,48.7,52.0,64.0;
w = 2000,3000,1000,500,4000,2000,1000;
enddata
@sum(fact(i) : t(i)*x(i)) < 1020 ;
@sum(fact(i) : t(i)*y(i)) < 1020 ;
@for( fact(i) :  x(i)+y(i) < n(i) ) ;  
@sum(fact(i) : w(i)*x(i)) < 40000 ;
@sum(fact(i) : w(i)*y(i)) < 40000 ;
@sum(fact(i) | i #ge# 5 #and# i #le# 7 : t(i) * ( x(i) * y(i) ) ) < 302.7 ;

min= (1020 - @sum(fact(i):t(i)*x(i)) ) + (1020 - @sum(fact(i):t(i)*y(i)) );

@for(fact(i) : @gin(x));
@for(fact(i) : @gin(y));

end\)

主要的区别在min上,但结果都在报错,不知道什么回事。
还有一个问题就是,为什么要用gin来规定x,y必须是正整数啊?
我在做另外一道题的时候,好像都没有用gin来保证gin是正整数,但是结果一样正确。
如果这道题没有用调用gin函数的话,结果却错了。











作者: Irving2    时间: 2021-1-5 15:29
另外一道题没有报错的题目和代码 3.png


\(model:
sets:
item/1..9/:c,x;
endsets
data:
c=5,4,4,3,4,3,2,2,3;
enddata
max=@sum(item(i):c(i)*x(i));
@sum(item(i):x(i))=6; !课程为6门;
x(1)+x(2)+x(3)+x(4)+x(5)>=2;
x(3)+x(5)+x(6)+x(8)+x(9)>=3;
x(4)+x(6)+x(7)+x(9)>=2;
x(3)<=x(1);
x(3)<=x(2);
x(4)<=x(7);
x(5)<=x(1);
x(5)<=x(2);
x(6)<=x(7);
x(8)<=x(5);
x(9)<=x(1);
x(9)<=x(2);
@for(item(i)bin(x(i)));
end\)




作者: vensonjett    时间: 2022-4-5 19:07
你老师给的答案?你老师给的目标函数都是错的哦。t*x写成x*y了
model:

sets:
fact/1..7/:t,w,x,y,n;
endsets

data:
n = 8,7,9,6,6,4,8;
t = 48.7,52.0,61.3,72.0,48.7,52.0,64.0;
w = 2000,3000,1000,500,4000,2000,1000;
enddata

@sum(fact:t*x)<=1020;
@sum(fact:t*y)<=1020;

@for(fact:x+y<=n);   
@sum(fact:w*x)<=40000;
@sum(fact:w*y)<=40000;

@sum(fact(i)|i#ge#5#and#i#le#7:t(i)*(x(i)*y(i)))<=302.7;

min=(1020-@sum(fact:t*x))+(1020-@sum(fact:t*y));

@for(factgin(x));
@for(factgin(y));

end

Global optimal solution found.
  Objective value:                             0.4774847E-11
  Objective bound:                             0.4774847E-11
  Infeasibilities:                              0.000000
  Extended solver steps:                               1
  Total solver iterations:                        541019


                       Variable           Value        Reduced Cost
                          T( 1)        48.70000            0.000000
                          T( 2)        52.00000            0.000000
                          T( 3)        61.30000            0.000000
                          T( 4)        72.00000            0.000000
                          T( 5)        48.70000            0.000000
                          T( 6)        52.00000            0.000000
                          T( 7)        64.00000            0.000000
                          W( 1)        2000.000            0.000000
                          W( 2)        3000.000            0.000000
                          W( 3)        1000.000            0.000000
                          W( 4)        500.0000            0.000000
                          W( 5)        4000.000            0.000000
                          W( 6)        2000.000            0.000000
                          W( 7)        1000.000            0.000000
                          X( 1)        4.000000            0.000000
                          X( 2)        6.000000            0.000000
                          X( 3)        4.000000            0.000000
                          X( 4)        3.000000            0.000000
                          X( 5)        0.000000            0.000000
                          X( 6)        1.000000            0.000000
                          X( 7)        0.000000            0.000000
                          Y( 1)        3.000000            0.000000
                          Y( 2)        1.000000            0.000000
                          Y( 3)        4.000000            0.000000
                          Y( 4)        2.000000            0.000000
                          Y( 5)        1.000000            0.000000
                          Y( 6)        0.000000            0.000000
                          Y( 7)        6.000000            0.000000
                          N( 1)        8.000000            0.000000
                          N( 2)        7.000000            0.000000
                          N( 3)        9.000000            0.000000
                          N( 4)        6.000000            0.000000
                          N( 5)        6.000000            0.000000
                          N( 6)        4.000000            0.000000
                          N( 7)        8.000000            0.000000






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5