Visual studio Microsoft Visual Studio返回的结果与通过命令行运行可执行文件不同

Visual studio Microsoft Visual Studio返回的结果与通过命令行运行可执行文件不同,visual-studio,cplex,Visual Studio,Cplex,我目前正在运行一个程序,该程序使用VisualStudio Ctrl+F5在发布模式下使用CPLEX concert技术,然后我还通过命令行运行了可执行文件 我得到了可重复的结果,但这两个不同的方法返回不同的值。此外,这两种不同的方法生成不同的LP文件——一种方法比另一种方法多12个约束 我只在发布模式下运行,所以我不认为这是调试与发布之间的问题 根据类似问题中的建议,我下载并使用默认设置来消除任何未初始化的变量和阴影错误等 在这一点上,我不知道该怎么办。我在编译时收到了关于没有concert.

我目前正在运行一个程序,该程序使用VisualStudio Ctrl+F5在发布模式下使用CPLEX concert技术,然后我还通过命令行运行了可执行文件

我得到了可重复的结果,但这两个不同的方法返回不同的值。此外,这两种不同的方法生成不同的LP文件——一种方法比另一种方法多12个约束

我只在发布模式下运行,所以我不认为这是调试与发布之间的问题

根据类似问题中的建议,我下载并使用默认设置来消除任何未初始化的变量和阴影错误等

在这一点上,我不知道该怎么办。我在编译时收到了关于没有concert.pdb的警告,但我认为这不应该是一个问题,因为我没有调试,并且由于我的ilcplex/ilocplex.h include,一些32个大移位隐式转换为64位


如果您有任何建议,我们将不胜感激。

它将出现在您的代码中或您如何运行它,因此这不是一个真正的CPLEX问题。您是否在VisualStudio中为调试设置了任何命令行参数?你确定你在同一个文件夹中运行,有相同的数据等吗

如果不明显,这些差异通常是由于未初始化的变量或类似的因素造成的,即使您已经检查过了

假设您正在对数据集进行循环以构建模型,因此请尝试一种老式的方法,在代码的关键点(例如每个循环之前、每个循环内部以及最后)向控制台或日志文件写入一些文本。尝试简单地计算代码中生成的每种约束的数量,并将其放入日志中

此外,以合理的方式命名变量和约束也很有用,这样LP文件的内容对您有意义,然后您应该能够看到哪些约束被添加/缺少/不同。使用对您有意义的名称,如Site_1_Time_1、Site_2_Time_1等,它们比愚蠢的短名称(如xij)或默认的内置命名更容易阅读


事实上,在我编写的每个真实系统中,我都会这样做——写一个日志文件,这样我就可以看到发生了什么以及为什么发生了什么,并且在我的模型中设置所有变量和约束的名称。这两种技术都为我节省了数天的时间来跟踪错误。

它是否使用文件进行任何类型的输入,这样两种方法的不同工作目录将看到不同的文件?是的,它读取输入文件,并且这两种方法从不同的目录运行,但我已经确认,从一个目录复制和粘贴到另一个目录的输入文件是完全相同的。没有命令行参数,但这些方法在不同的文件夹中运行。但是,它们使用从一个目录复制并粘贴到另一个目录的相同输入文件。谢谢你的建议-我将添加日志文件并重新命名我的约束,以便更清楚地了解发生了什么。