繁体   English   中英

加快CPLEX C ++代码的速度

[英]speed up CPLEX C++ code

这是在CPLEX C ++中实现我的第一个模型的结果,我非常惊讶质量如此缓慢和糟糕。 我相信,通过更好的表述可以避免很多事情。 有人可以帮我改善代码吗? 提示,想法,想法...一切都受到赞赏!

这是关于在5天内安排考试,每个考试都有2个时段。 我的输入是考试数量(第一行第一数字)和冲突的考试对(第一行第二数字),在这里我还知道参加这两项考试的学生人数(在接下来的行-> exem1test2#参加这两项考试的学生中)。 您可以在此处找到代码并在此处找到实例。

我包括的约束是:

  1. 每次考试只安排一次
  2. 不能同时安排冲突的考试
  3. 如果在同一天安排了冲突的考试,则将受到处罚
  4. 如果连续两天安排考试​​冲突,将受到处罚
  5. 如果在晚上的相邻时段安排了冲突的考试,则将受到处罚

我感到在表述中甚至有些错误,因为我无法想象目标值的价值是如此之高。 有人看到这个缺陷吗? 我被卡住了。

问题可能出在我试图找出是否违反了软约束的循环中。 我在那里循环了几天,但是可能我不小心一直覆盖我的变量。 是否有人知道如何确定二进制变量,该二进制变量指示软约束是否在任何一天都被违反(当然,它只能发生一次,但很可能不会在最后发生)。

我没有调试C ++代码,而是使用建模语言重新实现了模型(我相信这是度过一个周日夜晚的更快,更愉快的方式)。

(注意:修正错误后更新)。 这是我的解决方案,总罚金为751:

在此处输入图片说明

您应该能够将此插入您的代码并验证结果。

注意:使用一台旧笔记本电脑花了大约900秒钟来证明Cplex的最佳性能。 如果您只想找到一个好的解决方案,可以早一点停止:

在此处输入图片说明

(蓝线是目标,红线是最好的边界)。 为了获得良好的性能,我帮助Cplex设置了分支优先级并使用了优化运行建议的一些选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM