欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vs2017 C#调用cplex

程序员文章站 2022-03-28 20:21:45
...

1.先下载cplex,下载完成后直接点击下一步进行安装 :下面是网盘链接

链接:https://pan.baidu.com/s/1oRUwTyFvWMtlhbn9VmB7JA 提取码:2qvs

2.在vs中创建新项目
vs2017 C#调用cplex

3.选择"项目"–>“添加引用”–>“浏览”;选择自己cplex安装目录下的dll文件
vs2017 C#调用cplex
4.将产品了下263.dll文件复制到对应项目的debug文件夹下
vs2017 C#调用cplex
5,简单尝试一个例子

using ILOG.Concert;
using ILOG.CPLEX;
public class Blend
{
    internal static int _nbElements = 3;
    internal static int _nbRaw = 2;
    internal static int _nbScrap = 2;
    internal static int _nbIngot = 1;
    internal static double _alloy = 71.0;

    internal static double[] _cm = { 22.0, 10.0, 13.0 };
    internal static double[] _cr = { 6.0, 5.0 };
    internal static double[] _cs = { 7.0, 8.0 };
    internal static double[] _ci = { 9.0 };
    internal static double[] _p = { 0.05, 0.30, 0.60 };
    internal static double[] _P = { 0.10, 0.40, 0.80 };

    internal static double[][] _PRaw = {new double[] {0.20, 0.01},
                                       new double[] {0.05, 0.00},
                                       new double[] {0.05, 0.30}};
    internal static double[][] _PScrap = {new double[] {0.00, 0.01},
                                         new double[] {0.60, 0.00},
                                         new double[] {0.40, 0.70}};
    internal static double[][] _PIngot = {new double[] {0.10},
                                         new double[] {0.45},
                                         new double[] {0.45}};


    public static void Main(string[] args)
    {
        try
        {
            Cplex cplex = new Cplex();

            INumVar[] m = cplex.NumVarArray(_nbElements, 0.0, System.Double.MaxValue);
            INumVar[] r = cplex.NumVarArray(_nbRaw, 0.0, System.Double.MaxValue);
            INumVar[] s = cplex.NumVarArray(_nbScrap, 0.0, System.Double.MaxValue);
            INumVar[] i = cplex.NumVarArray(_nbIngot, 0.0, System.Double.MaxValue);
            INumVar[] e = new INumVar[_nbElements];

            // Objective Function: Minimize Cost
            cplex.AddMinimize(cplex.Sum(cplex.ScalProd(_cm, m),
                                        cplex.ScalProd(_cr, r),
                                        cplex.ScalProd(_cs, s),
                                        cplex.ScalProd(_ci, i)));

            // Min and max quantity of each element in alloy
            for (int j = 0; j < _nbElements; j++)
            {
                e[j] = cplex.NumVar(_p[j] * _alloy, _P[j] * _alloy);
            }

            // Constraint: produce requested quantity of alloy
            cplex.AddEq(cplex.Sum(e), _alloy);

            // Constraints: Satisfy element quantity requirements for alloy
            for (int j = 0; j < _nbElements; j++)
            {
                cplex.AddEq(e[j],
                            cplex.Sum(m[j],
                                      cplex.ScalProd(_PRaw[j], r),
                                      cplex.ScalProd(_PScrap[j], s),
                                      cplex.ScalProd(_PIngot[j], i)));
            }

            if (cplex.Solve())
            {
                if (cplex.GetStatus().Equals(Cplex.Status.Infeasible))
                {
                    System.Console.WriteLine("No Solution");
                    return;
                }

                double[] mVals = cplex.GetValues(m);
                double[] rVals = cplex.GetValues(r);
                double[] sVals = cplex.GetValues(s);
                double[] iVals = cplex.GetValues(i);
                double[] eVals = cplex.GetValues(e);

                // Print results
                System.Console.WriteLine("Solution status = " + cplex.GetStatus());
                System.Console.WriteLine("Cost:" + cplex.ObjValue);

                System.Console.WriteLine("Pure metal:");
                for (int j = 0; j < _nbElements; j++)
                    System.Console.WriteLine("(" + j + ") " + mVals[j]);

                System.Console.WriteLine("Raw material:");
                for (int j = 0; j < _nbRaw; j++)
                    System.Console.WriteLine("(" + j + ") " + rVals[j]);

                System.Console.WriteLine("Scrap:");
                for (int j = 0; j < _nbScrap; j++)
                    System.Console.WriteLine("(" + j + ") " + sVals[j]);

                System.Console.WriteLine("Ingots : ");
                for (int j = 0; j < _nbIngot; j++)
                    System.Console.WriteLine("(" + j + ") " + iVals[j]);

                System.Console.WriteLine("Elements:");
                for (int j = 0; j < _nbElements; j++)
                    System.Console.WriteLine("(" + j + ") " + eVals[j]);
            }
            cplex.End();
        }
        catch (ILOG.Concert.Exception exc)
        {
            System.Console.WriteLine("Concert exception '" + exc + "' caught");
        }
        System.Console.ReadKey();
    }
}

6.运行一下,成功!
vs2017 C#调用cplex

相关标签: cplex c#