不懂0和1 2024-04-30 14:48 采纳率: 41.2%
浏览 22
已结题

C#调用cplex如何获得决策变量取值

如题,可以用getvalues的方法,但为什么我这里提示括号后需要填写的是ILPMatrix,而我始终无法得到这个ILPMatrix。

img

并不存在一个getlpmatrix的方法,只有一个getlpmatrixenumerator的方法。但该方法总是输出空值。

  • 写回答

3条回答 默认 最新

  • 专家-皆知 2024-04-30 14:52
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    在使用C#调用IBM ILOG CPLEX Optimization Studio时,获取决策变量的取值通常涉及几个步骤。从您的描述来看,您可能在尝试直接通过枚举器获取矩阵然后传递给GetValues方法,但遇到了一些困难,因为直接从枚举器得到的ILPMatrix可能不是您预期的形式,特别是如果您发现它输出空值。

    下面是一个更标准的流程来获取决策变量的值:

    1. 构建模型:首先确保您的模型已经被正确构建,并且已经求解。

    2. 获取决策变量:在CPLEX中,您需要有对决策变量的引用。这通常是通过变量对象集合完成的。

    3. 求解模型:在获取变量值之前,确保您调用了solve()方法。

    4. 获取变量值:使用Solution属性来访问变量的值。

    以下是一个简化的示例代码,展示了如何正确地获取决策变量的值:

    using ILOG.CPLEX;
    using System;
    
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 初始化CPLEX实例
                using (var cplex = new Cplex())
                {
                    // 假设您已经定义了模型和决策变量...
                    // 例如,定义一个简单的线性规划问题的变量x
                    Variable x = cplex.NewVariable(0, Double.PositiveInfinity, "x");
    
                    // 定义您的目标函数和约束(这里省略具体实现细节)
    
                    // 解决问题
                    cplex.Solve();
    
                    // 获取决策变量的值
                    if (cplex.Status == SolutionStatus.Optimal)
                    {
                        // 使用Solution.Value属性获取变量的值
                        double xValue = cplex.GetSolution(x);
                        Console.WriteLine($"变量x的值为: {xValue}");
                    }
                    else
                    {
                        Console.WriteLine("问题没有找到最优解。");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"发生错误: {ex.Message}");
            }
        }
    }
    

    关于您提到的GetLPMatrixEnumerator和ILPMatrix,这些通常用于访问模型的内部结构,而不是直接用于获取变量值。在大多数情况下,直接通过GetSolution方法或变量的Solution.Value属性获取决策变量的值更为直接和简便。

    如果您的需求涉及到更复杂的模型结构分析,可能需要深入理解CPLEX提供的接口和数据结构,但获取变量值的基本方法如上所示。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月30日
  • 创建了问题 4月30日