数学建模社区-数学中国
标题:
求教:这段程序运行的非常慢,该怎么优化?
[打印本页]
作者:
ziper
时间:
2016-4-3 22:04
标题:
求教:这段程序运行的非常慢,该怎么优化?
本帖最后由 ziper 于 2016-4-4 13:58 编辑
首先,此程序是为了解决如下问题。
2016-4-3 21:52 上传
下载附件
(284.57 KB)
我的思路是这样的,
比如说我要验证6黄4绿8红7蓝这个情况
分别设四个函数ABCD,A代表400人黄楼,B代表300人绿楼,C代表200人红楼,D代表100人蓝楼。设每个函数的xy坐标分别为E1 E2 F1 F2 G1 G2 H1 H2
然后坐标的取值范围都是{1,2,3,4,5},
25个点,坐标彼此不同
对任意一个A点,存在一个B点、C点、D点与A点的距离为1(即在几何上相邻)
对任意一个B点,存在一个C点、D点与A点的距离为1
对任意一个C点,存在一个D点与A点的距离为1
我想这样应该能验证满足题意的一个解了,于是写了下面的程序
补充:更糟了,开全局求解跑了八个小时显示不存在解(事实上存在,可画出)。
估计是最后一大段的逻辑出现了错误,即想表达
对任意一个A点,存在一个B点、C点、D点与A点的距离为1
对任意一个B点,存在一个C点、D点与A点的距离为1
对任意一个C点,存在一个D点与A点的距离为1
这一部分写的不对。
求建议。
SETS:
ABUILT/1..6/:E1,E2;
BBUILT/1..4/:F1,F2;
CBUILT/1..8/:G1,G2;
DBUILT/1..7/:H1,H2;
ABLINK(ABUILT,BBUILT);
ACLINK(ABUILT,CBUILT);
ADLINK(ABUILT,DBUILT);
BCLINK(BBUILT,CBUILT);
BDLINK(BBUILT,DBUILT);
CDLINK(CBUILT,DBUILT);
ABCDLINK(ABUILT,BBUILT,CBUILT,DBUILT);
ENDSETS
!定义坐标的取值范围;
2016-4-3 22:07 上传
下载附件
(171.6 KB)
end
然后程序跑的非常非常慢。我也感觉自己的程序写的太繁琐了,应该是坐标的从离散点集{1,2,3,4,5}取值这一步写的不好,可是不知道怎么去简化它。求教。
新人初学,刚来论坛,准备常驻,请多关照。
作者:
wujianjack2
时间:
2016-4-7 15:18
这个问题可以锻炼一下建模的能力,stackoverflow上有这样类似的一个问题的讨论,可以看看:
http://stackoverflow.com/questio ... placement-in-a-game
个人觉得可以转constraint programming问题,转普通规划难点在于建模,尽可能避免非线性是难点,简单想了想,完全线性化的思路还没有,引入非线性特别是complementary这种约束将非常糟糕,LINGO优化能力也不算突出。
有空有兴趣的朋友们可以玩一玩。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5