QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3050|回复: 5
打印 上一主题 下一主题

怎么把lingo中集合所需要的点剔除出来?谢谢。

[复制链接]
字体大小: 正常 放大
hitman 实名认证       

29

主题

3

听众

151

积分

升级  25.5%

该用户从未签到

自我介绍
对数学建模感兴趣。
跳转到指定楼层
1#
发表于 2010-3-27 15:54 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

i点是目标点,j点是攻击设施所在点,ai是i点的伤亡数(为已知数据),D是射程范围(已知)xij=1表示i攻击j,否则为0,怎么把目标函数表示出来?谢谢。
sets:
  attack/1..5/;
  target/1..10/:a;
  link(attack, target): D,x;
endsets
Max=@sum(link:a(i)*x(i,j)),目标函数里的j点不知道怎么表示,请教。是要用到if函数吗?书上没有看到过类似的。
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
olh2008 实名认证       

88

主题

42

听众

1万

积分

船长

  • TA的每日心情
    开心
    2018-9-1 14:36
  • 签到天数: 86 天

    [LV.6]常住居民II

    邮箱绑定达人 优秀斑竹奖 新人进步奖 发帖功臣 最具活力勋章 元老勋章 原创写作奖 风雨历程奖

    群组Latex研学群

    群组数学建模

    群组Mathematica研究小组

    群组LINGO

    群组Matlab讨论组

    过虑条件写在集的后面,用“|”隔开,比如
    @sum(link(i,j)|i #le#5 #and# j #gt# 3:x(i,j))
    不过我不太清楚你那个约束是什么意思
    生命,到最后总能成诗……
    回复

    使用道具 举报

    hitman 实名认证       

    29

    主题

    3

    听众

    151

    积分

    升级  25.5%

    该用户从未签到

    自我介绍
    对数学建模感兴趣。
    回复 2# olh2008


       

    可能我没有表达清楚,这里重新解释下题目的意思,还请斑竹和各位赐教:

    先把目标公式简化下:

    i点是目标点,i=1…10, j点是导弹发射场所,j=1…5aii点被1枚导弹击中造成的伤亡数(为已知数据)D是导弹的射程范围(已知为常数),目标函数是要在5个发射场所中选出3个导弹发射场所,放置导弹各1枚,即总共可以放置3枚,使得3枚导弹对于10个目标点中的3个目标点造成最大的伤害数,1枚导弹只能打击1个目标点,不能重复打击相同的目标点。xij=1表示j点放置的导弹攻击目标点i,否则为0,怎么把目标函数表示出来?谢谢。
    sets:
      attack/1..5/;
    j表示;
      target/1..10/a;i表示;
      link(attack, target): x;ji表示;
    endsets

    怎么把目标函数里在攻击半径D内的j点过滤出来,谢谢。

    回复

    使用道具 举报

    olh2008 实名认证       

    88

    主题

    42

    听众

    1万

    积分

    船长

  • TA的每日心情
    开心
    2018-9-1 14:36
  • 签到天数: 86 天

    [LV.6]常住居民II

    邮箱绑定达人 优秀斑竹奖 新人进步奖 发帖功臣 最具活力勋章 元老勋章 原创写作奖 风雨历程奖

    群组Latex研学群

    群组数学建模

    群组Mathematica研究小组

    群组LINGO

    群组Matlab讨论组

    回复 3# hitman


        我觉得不应该把它放到过虑条件里去,应该把它加入到条件中。因为过虑条件一般都只能对下标进行过虑,而你的式子中包含了非下标的关系表达式,这一个好像在Lingo中是无法实现的。
       还有一个要注意的是:Lingo中的大小写不敏感,比如D与d会被认为是同一个变量。
       根据我对题目的理解,我试着写了Lingo的代码,应该能解决你上面所陈述的问题。

    1. model:
    2. sets:
    3. attack/1..5/:;   !导弹发射场所,j;
    4. target/1..10/:a; !目标打击点,j;
    5. link(attack,target):d,x;
    6. endsets

    7. data:
    8. k=  ; !导弹的射程;
    9. a=  ;!被导弹击中后各目标点的伤害;
    10. d=  ; !第i个导弹发射场与第j个目标之间的距离;
    11. enddata

    12. max=@sum(link(j,i):x(j,i)*a(i));  !使造成的打击伤害最大;

    13. @sum(link:x)=3;                            !3枚导弹;
    14. @for(link(j,i):x(j,i)*d(j,i)<=k);          !导弹射程的限定;
    15. @for(link:@bin(x));                        !x为0-1变量;
    16. end
    复制代码
    生命,到最后总能成诗……
    回复

    使用道具 举报

    hitman 实名认证       

    29

    主题

    3

    听众

    151

    积分

    升级  25.5%

    该用户从未签到

    自我介绍
    对数学建模感兴趣。
    谢谢版主,将实际数据输进去后,并且运行后确实得到了答案。
    现在明白了,下标的过滤问题不一定要在目标函数中就表示出来。
    回复

    使用道具 举报

    Maosen 实名认证       

    1

    主题

    3

    听众

    238

    积分

  • TA的每日心情
    开心
    2012-7-15 10:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    自我介绍
    数学是这个世界上一门精确的语言,谁掌握了数学,谁就掌握了未来!
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-9 19:44 , Processed in 0.683927 second(s), 79 queries .

    回顶部