我目前正在使用Visual Studio(Ctrl + F5)在发布模式下运行使用CPLEX Concert技术的程序,然后我也通过命令行运行了可执行文件。
我得到可重复的结果,但是两种不同的方法返回不同的值。此外,两种不同的方法产生不同的LP文件-一种约束比另一种约束多12个。
我只在发布模式下运行,所以我不认为这是调试与发布的问题。
基于类似问题的建议,我下载了cppcheck(并使用默认设置)以消除所有未初始化的变量和阴影错误等。
这时,我不知所措。我在编译时没有concert.pdb
时会发出警告(但我不认为这不是问题,因为我没有调试),并且由于以下原因导致“ 32-big shift隐式转换为64位”我的ilcplex/ilocplex.h
包含。
任何建议将不胜感激。
答案 0 :(得分:1)
它将在您的代码中或您如何运行,因此这实际上不是CPLEX问题。您是否设置了用于在Visual Studio中进行调试的任何命令行参数?您确定您在同一文件夹中运行相同数据吗?
如果没有什么明显的区别,这些差异通常是由于未初始化的变量或类似的东西造成的,即使您已经进行了检查。
想必您正在遍历数据集以构建模型,因此请尝试一种老式的方法,并在代码中的关键点向控制台或日志文件中写入一些文本,例如每个循环之前和每个内部循环,最后一次。尝试简单地计算一下您在代码中生成的每种约束的数量,并将其也记录在日志中。
另外,以一种合理的方式命名变量和约束很有用,这样LP文件的内容对您有意义,然后您应该能够看到添加/缺失/不同的约束。使用对您有意义的名称,例如“ Site_1_Time_1”,“ Site_2_Time_1”等,它们比愚蠢的短名称(例如“ xij”)或默认的内置命名要容易得多。
在我编写的几乎每个现实世界系统中,我都做这两个工作-编写日志文件,以便了解发生的情况和原因,并在模型中设置所有变量和约束的名称。这两种技术都为我节省了追踪错误的时间。