以前写在CSDN上的文章。转到博客园之后,打算把这个教程移过来,顺便完善后面的教程。主要是在Asp.Net+EF6里面使用cplex,完成一个最优生产计划的决策。当时在查找如何在C#中引用cplex时,找到的大多是cplex在VS中的环境配置,大都还是以C++为例,而且觉得有些复杂。所以想写一篇关于C#引用的教程。

关于下载

我下载的版本是cplex studio12.8.0,可以去官网注册账号并下载试用版或者教育版。其他下载途径自行百度。

安装

下载之后,新建一个文件夹以备安装使用。可以不用安装在C盘当中,安装后的文件夹如图所示:

在这些文件夹当中,包含有C#、java、matlab、python等的教程(英文版),以及提供的样例。以C#为例:

教程位于~\cplex\dotnet.html当中。
样例在~\cplex\examples\x64_windows_vs2017\stat_mda当中。
双击打开其中的examples.cs.net.sln文件,其中有很多C#的演示程序,可以用来学习。

附上一个较详细的官方教程

.dll引入项目

1. 打开VS2017,新建一个C#控制台应用程序,用来做配置效果的测试。
2. 点击“项目”-“添加引用”(或者直接在解决方案“引用”上,右键添加引用)
3. 浏览文件夹,找到你的安装位置。打开“~\cplex\bin\x64_win64”目录,选择其中的这两个添加入你的项目当中:

4. 可以从样例代码中复制一个做测试,比如:

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();
}
}

看了其他教程中,说要将解决方案启动配置为Release,但后面试了一下选为Debug也可以正常使用。若是shell窗体一闪消失,可以在末尾加一句Console.ReadKey();

5.若是出现以下错误,选择“项目”-你的“项目属性”-“生成”,取消“首选32位”

运行结果如图:

如何在C#中引入CPLEX的dll(CPLEX系列-教程一)的更多相关文章

  1. 如何在jsp中引入bootstrap

    如何在jsp中引入bootstrap包: 1.首先在http://getbootstrap.com/上下载Bootstrap的最新版. 您会看到两个按钮: Download Bootstrap:下载 ...

  2. 如何在idea中引入一个新maven项目

    如何在idea中引入一个新的maven项目,请参见如下操作:      

  3. QT总结第3篇:如何在QT中添加.lib,.dll还有.h文件

    因为我在工作的过程中,使用的是第三方提供的库,但是如何将这些库添加到QT的工程中,是个问题,让我恼火了很久,怎么弄都是错的. 下面,我会对这个问题,进行叙述,希望其他人第一次遇到这种问题的时候,可以轻 ...

  4. [转]如何在Angular4中引入jquery

    本文转自:https://blog.csdn.net/home_zhang/article/details/77992734 1.anjq是我的项目名称: 在anjq目录下打开dos命令窗口,然后依次 ...

  5. IOS开发问题录:如何在Swift中引入Head文件?

    最近在学习IOS开发,从一个简单的登录开始,逐步解决了一个网络访问.获取控件值等问题,遇到了信息加密的问题. 做为IOS的入门者,信息加密需要解决如下几个问题: 1.IOS的MD5加密有没有固定函数, ...

  6. 如何在html中引入jsx文件

    不使用webpack工具做react项目 1.引入react相关js文件 <script src="https://cdn.staticfile.org/react/16.4.0/um ...

  7. 如何在vue中引入图片?

    当我们在Vue.js项目中引用图片时,关于图片路径有以下几种情形: 使用一. 我们在data里面定义好图片路径 imgUrl:'../assets/logo.png' 然后,在template模板里面 ...

  8. 关于pom.xml文件中配置jquery,以及如何在jsp中引入

    pom.xml <!-- 对jquery的支持 --> <dependency> <groupId>org.webjars.bower</groupId> ...

  9. 引用文章 如何在lambda中引入递归调用

    // clang++ 3.5 // maybe gcc 4.9 support it, but I don't test it #include<iostream> int main() ...

随机推荐

  1. 我的MVP呢?

    Ladies and gentelmen, welcome the MVP of NBA 16-2017 Season:... 呃,等下,好像哪里不对.那是因为,我要说的MVP根本就不是Most Va ...

  2. mybatis3.2初学感悟

    新手,学了mybatis框架一周,写点感悟下来. mybatis,是操作数据库,持久层的一个框架,它是对JDBC的封装.看到了这个框架,我突然感受到封装与抽象的力量.也明白了些为什么要分层的原因. 记 ...

  3. python中的open( )函数

    函数原型 open(file, mode=‘r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True) buff ...

  4. Windows 8风格应用-触控输入

    参考:演练:创建您的第一个触控应用程序 http://msdn.microsoft.com/zh-cn/library/ee649090(v=vs.110).aspx win8支持多点触摸技术,而我们 ...

  5. JS基础-表单元素-新表单元素-js概述

    1.表单元素 1.input元素 1.隐藏域和文件选项框 1.隐藏域 <input type="hidden"> 要提交给服务器的数据,但是不想展示给用户看可以放在隐藏 ...

  6. ansible的playbook剧本

    一.playbook剧本介绍 1)playbook介绍 Playbooks是Ansible的配置,部署和编排语言.它们可以描述您希望远程系统执行的策略,或一般IT流程中的一组步骤. 如果说ansibl ...

  7. Win7 VS2015环境编译cegui-0.8.5

    首先是去官网下载源码与依赖库 http://cegui.org.uk/ 然后得提一下,编译DX11版本带Effects11框架的话会有问题,也就是默认情况编译有问题,这是因为VS2015升级后编译器对 ...

  8. kubeadm 双节点部署k8s v1.13.3+calico v3.3.4

    一.部署环境 VMware Workstation 10 centos7 二.主机配置(每台主机都要做) 主机名 ip cpu ram master 192.168.137.10 3G node1 1 ...

  9. 第04章:MongoDB基本概念

    ① 数据库 MongoDB的一个实例可以拥有一个或多个相互独立的数据库,每个数据库都有自己的集合   集合 集合可以看作是拥有动态模式的表   文档 文档是MongoDB中基本的数据单元,类似于RDB ...

  10. 21-z-index

    z-index 这个东西非常简单,它有四大特性,每个特性你记住了,页面布局就不会出现找不到盒子的情况. z-index 值表示谁压着谁,数值大的压盖住数值小的, 只有定位了的元素,才能有z-index ...