【问题标题】:Start the CPLEX with given Initial Solution on C# (Concert technology)使用 C# 上的给定初始解决方案启动 CPLEX(音乐会技术)
【发布时间】:2017-10-14 06:02:55
【问题描述】:

我想用 CPLEX-C# 解决 MILP 问题。我的问题很大,为了提高 CPU 时间,我想使用初始解决方案。我想将此解决方案添加到 cplex 并开始使用给定的初始解决方案来解决问题。我使用了以下代码:

     try
        {
            startvar = new INumVar[numberOfAllNode * numberOfAllNode];
            startval = new double[numberOfAllNode * numberOfAllNode];

            for (int i = 0, idx = 0; i < numberOfAllNode; i++)
                for (int j = 0; j < numberOfAllNode; j++)
                {
                    startvar[idx] = X[i][j];
                    startval[idx] = start[i][j];
                    idx++;
                }

            startvar = null;
            startval = null;

            cplex.AddMIPStart(startvar, startval,Cplex.MIPStartEffort.SolveMIP);

        }
    catch (ILOG.Concert.Exception)
        {
            throw;
        }

在这段代码中,我有多维数组决策变量X[i][j](二元决策变量),值等于start[i][j]start[i][j] 的值作为参数存储为double [] array。当我运行代码时,出现以下错误:

Warning:  No solution found from 1 MIP starts.

Root node processing (before b&c):
  Real time             =    5.07 sec. (2238.50 ticks)
Parallel b&c, 4 threads:
  Real time             =    0.00 sec. (0.00 ticks)
  Sync time (average)   =    0.00 sec.
  Wait time (average)   =    0.00 sec.
                          ------------
Total (root+branch&cut) =    5.07 sec. (2238.50 ticks)
Couldn't Solve The Problem! 

我有两个问题: 1)我必须把这段代码放在模型的哪个部分? (我的意思是在所有约束之后添加目标值并调用 addMin 或 addMax 或在它们之前?)

2) 当我推荐startvar = null; startval = null;时出现以下错误:

An unhandled exception of type 'ILOG.CPLEX.Cplex.UnknownObjectException' occurred in CPLEX.exe

Additional information: CPLEX Error: object is unknown to IloCplex 

如果您能帮忙解决这个问题,我将不胜感激。

【问题讨论】:

    标签: c# cplex mixed-integer-programming


    【解决方案1】:

    Error in using addMIPStart() in CPLEX C++ 非常相似,但在 C# 中。

    我通常会在模型构建结束时调用 AddMIPStart(),就在 solve() 之前。那是(对我而言)拨打电话的“自然”地点。

    如果您的模型中存在任何约束或目标中未提及的变量,那么当 CPLEX 从 Concert 表达式等中提取内部模型时,它不会将它们包含在其内部模型中。然后,如果您尝试为这些变量设置值,CPLEX 将无法识别它们。我会检查你的 mip start 中的所有变量是否确实包含在你的约束或目标的某个地方。

    【讨论】:

    • 感谢您的回复。我的问题在我的 MIPSTART 中有 3 个决策变量(2 个二进制和 1 个继续)我只为其中一个(X[i][j])给出值。我需要为其余两个变量输入初始值吗?
    • 我认为您不需要为所有变量提供值。如果您尝试为不在模型中的变量提供 mipstart 值,您报告的错误就是您得到的。此外,你怎么能只有 2 个二进制变量和 1 个连续变量 - 代码中的变量数应该是平方数,即 numberOfAllNode * numberOfAllNode。 numberOfAllNode 有多大?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2021-07-13
    • 1970-01-01
    • 2020-12-01
    • 2019-11-21
    • 1970-01-01
    • 2017-03-01
    相关资源
    最近更新 更多