【发布时间】:2016-03-23 01:05:08
【问题描述】:
这是在 CPLEX C++ 中实现我的第一个模型的结果,我非常惊讶质量有多慢和差。我相信通过更好的配方可以避免大部分问题。有人可以帮我改进代码吗?提示、想法、想法......一切都值得赞赏!
这是关于在 5 天内安排考试,每个考试有 2 个可用时间段。我的输入是考试数量(第一行第一个数字)和冲突的考试对(第一行第二个数字),其中我还知道参加这两项考试的学生人数(在以下行中 ->exam1 Exam2 #students 参加两项考试)。 您可以找到代码here 和实例here。
我包括的约束是:
- 每门考试只安排一次
- 冲突的考试不能安排在同一时期
- 如果在同一天安排有冲突的考试,将受到处罚
- 如果连续几天安排有冲突的考试,将受到处罚
- 如果有冲突的考试安排在相邻时段的夜间考试,将受到处罚
我有一种感觉,甚至在表述中有些地方是错误的,因为我无法想象客观价值的价值如此之高。有人看到缺陷吗?我被卡住了。
问题可能出在我试图找出是否违反软约束的循环中。我在那里循环了好几天,但可能我一直不小心覆盖了我的变量。有谁知道如何确定指示是否在任何一天违反软约束的二进制变量(当然它只能发生一次,但很可能不是在最后)。
【问题讨论】:
-
当你说模型很慢时,我猜你是指求解性能?这听起来像个小问题。模型构建和求解的速度有多慢?当您说质量差时,您指的是生成的解决方案吗?它的质量差在哪里?你的目标价值有多大?
-
日志显示“根松弛解决方案时间 = 0.05 秒。(38.16 滴答声)”,我想这是找到第一个可行解决方案所需的时间。它的目标值是 28722(在最佳整数列中),它不会低于 28608,应该更像是 700
-
没有。根松弛时间是在根节点解决松弛问题(忽略完整性)所花费的时间。这通常不是一个整数可行的解决方案。您可以手动创建一个解决方案进行比较吗?
-
如果节点日志中的第一个条目显示最佳整数,那么松弛整数不是找到解决方案吗?或者我该如何解释?
标签: c++ optimization discrete-mathematics cplex