楼主: Pixels
8114 11

[统计软件] lingo如何表达这类约束 [推广有奖]

  • 0关注
  • 0粉丝

小学生

50%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
101 点
帖子
8
精华
0
在线时间
6 小时
注册时间
2014-8-30
最后登录
2015-8-17

楼主
Pixels 发表于 2014-8-30 14:31:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
ping.jpg
如图,这种约束如何表达,如果这样写“@for(var1(i):@sum(var2(j):x(i,j))=3 #or# @sum(var2(j):x(i,j)) = 0));"会提示”too many inequality or equality relations“,如果用@if函数这样写”@for(var1(i):@if(@sum(var2(j):x(i,j))#eq#3,3,@for(var2(j):x(i,j)=0)));“又会报语法错误,故特意来此请教。
大家来帮帮忙啊
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:lingo ING Lin NGO Inequality 如何

沙发
じoren 发表于 2014-8-30 14:52:29
@for(count(i):@sum(count(j):x(i,j)*fal(i,j))<N);  

藤椅
Pixels 发表于 2014-8-31 10:03:00
じoren 发表于 2014-8-30 14:52
@for(count(i):@sum(count(j):x(i,j)*fal(i,j))
这是新加入了一个变量吗,能表达0或3吗?
我看到一个解决方法,用3个式子表达,第一个<3,第二个不等于1,第三个不等于2.

板凳
wujianjack2 发表于 2014-8-31 16:59:01
可以巧妙地用SEMIC函数完成。

测试程序1:
min=a;
a1+a2+a3=a;
@bin(a1);@bin(a2);@bin(a3);
@semic(3,a,3);

结果1:
  Global optimal solution found.
  Objective value:                         0.00000000000
  Objective bound:                         0.00000000000
  Infeasibilities:                         0.00000000000
  Extended solver steps:                               0
  Total solver iterations:                             0
  Elapsed runtime seconds:                          0.04

  Model Class:                                      MILP

  Total variables:                      4
  Nonlinear variables:                  0
  Integer variables:                    4

  Total constraints:                    2
  Nonlinear constraints:                0

  Total nonzeros:                       5
  Nonlinear nonzeros:                   0



                                     Variable                Value             Reduced Cost
                                            A        0.00000000000            0.00000000000
                                           A1        0.00000000000            1.00000000000
                                           A2        0.00000000000            1.00000000000
                                           A3        0.00000000000            1.00000000000

                                          Row         Slack or Surplus           Dual Price
                                            1        0.00000000000           -1.00000000000
                                            2        0.00000000000            1.00000000000

测试程序2:
max=a;
a1+a2+a3=a;
@bin(a1);@bin(a2);@bin(a3);
@semic(3,a,3);

结果2:
  Global optimal solution found.
  Objective value:                         3.00000000000
  Objective bound:                         3.00000000000
  Infeasibilities:                         0.00000000000
  Extended solver steps:                               0
  Total solver iterations:                             0
  Elapsed runtime seconds:                          0.04

  Model Class:                                      MILP

  Total variables:                      4
  Nonlinear variables:                  0
  Integer variables:                    4

  Total constraints:                    2
  Nonlinear constraints:                0

  Total nonzeros:                       5
  Nonlinear nonzeros:                   0



                                     Variable                Value             Reduced Cost
                                            A        3.00000000000            0.00000000000
                                           A1        1.00000000000           -1.00000000000
                                           A2        1.00000000000           -1.00000000000
                                           A3        1.00000000000           -1.00000000000

                                          Row         Slack or Surplus           Dual Price
                                            1        3.00000000000            1.00000000000
                                            2        0.00000000000           -1.00000000000


涉及到的相关知识,请自行学习,我不再多说。


已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
yangyuzhou + 60 + 2 + 2 + 2 热心帮助其他会员

总评分: 论坛币 + 60  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

报纸
Pixels 发表于 2014-8-31 19:29:41
wujianjack2 发表于 2014-8-31 16:59
可以巧妙地用SEMIC函数完成。

测试程序1:
好的,感谢精彩答复,另外听说这个只能用于线性规划中;而且这个是限定变量的,这里要求的是某列的和,不合要求故。

地板
wujianjack2 发表于 2014-8-31 19:31:42
Pixels 发表于 2014-8-31 19:29
好的,感谢精彩答复,另外听说这个只能用于线性规划中
   呵呵 ,试试才知道哟。

7
wujianjack2 发表于 2014-8-31 23:30:11
Pixels 发表于 2014-8-31 19:29
好的,感谢精彩答复,另外听说这个只能用于线性规划中;而且这个是限定变量的,这里要求的是某列的和,不合 ...
   是不可行吗?我的测试程序只是做了一个演示,以证明SEMIC可以完成类似于SEMINT的功能,LINGO目前似乎不支持SEMI INTEGER,要写成合你的要求应该只需稍微改一下就行了,从你的表述中,我目前仍觉得这个思路似乎可行,某列的和无非是改一下表达而已。
   你是想通过式子之和为3或者0来限制X的取值吗?这个应该不冲突吧?不是很理解,若可以,可以放上程序,我有时间看看。
   不过,请勿私信。

8
Pixels 发表于 2014-9-1 09:31:32
wujianjack2 发表于 2014-8-31 23:30
是不可行吗?我的测试程序只是做了一个演示,以证明SEMIC可以完成类似于SEMINT的功能,LINGO目前似乎不 ...
model:
sets:
var1/1..1000/:num;
var2/1..100/:d;
link(var1,var2):content,x;

endsets
data:
d =
10         40         15         20         20         12         30         33         35         25         29         31         28         61         2         28         28         26         31         38         34         29         35         22         29         81         1         19         25         41         29         35         1 40 39 5 106 30 29 2 110 6 15 36 34 11 32 25 2 64 40 26 33 26 61 2 11 38 44 36 27 31 42 44 12 81 10 35 33 30 2 40 15 11 28 24 20 88 9 28 31 8 22 3 70 21 34 4 38 27 39 28 24 15 50 24 36 55 2 40
;
content = @ole('test.xls','data');
@ole('0xljlNu3efa609bff65761325dbc67312a1ce923.xls','data') = x;
enddata

max = @sum(link:content*x);


@for(var2(j):@sum(var1(i):x(i,j))<d(j));


@for(var1(i):@sum(var2(j):x(i,j))<3);
@for(var1(i):@abs(@sum(var2(j):x(i,j))-1 )< 0.0001);
@for(var1(i):@abs(@sum(var2(j):x(i,j))-2 )< 0.0001);
@for(link:@bin(x));

end
test.xls数据太多就不传了,你自己模拟些数据也行。
这是我使用的约束,这样求出的结果会有某行为1或2
@for(var1(i):@sum(var2(j):x(i,j))<3);
而@semic限定的是基本变量,如果这样写@for(var1(i):@semic(3,@sum(var2(j):x(i,j)),3));lingo会提醒semic使用错误。

9
wujianjack2 发表于 2014-9-1 09:41:05
Pixels 发表于 2014-9-1 09:31
model:
sets:
var1/1..1000/:num;
   似乎不可以semic嵌套sum使用,错在此吧。
   你应该先将@sum(var2(j):x(i,j))赋值为某变量,再对此变量做限定,这实质上是等同的,应该可以满足要求。另外,semic不是只能用于线性规划中,你听谁说的?你得亲自试一试才行,若只是听他人说,永远也超越不了别人,得亲自试一试才知道,网上回答LINGO相关知识的没几个靠谱的,知道的都不全。
   我没有时间给你模拟数据,言尽于此,自己多多尝试吧。
   祝你好运!

10
Pixels 发表于 2014-9-1 09:45:21
wujianjack2 发表于 2014-9-1 09:41
似乎不可以semic嵌套sum使用,错在此吧。
   你应该先将@sum(var2(j):x(i,j))赋值为某变量,再对此变 ...
好的,多谢!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-30 15:14