1 Cplex是IBM出的一款科学计算软件,从IBM官网可以下到最新版
2 看了一下Cplex的支持软件,最常用的是matlab,所以先从他入手,一步步来。
3 首先要安装matlab和Cplex,最近几年的版本都可以,matlab是破解版没关系。我能从网上下到的是2016a,64位破解版。Cplex是从IBM官网下载的。Y软件包是绿色的,放在计算机任意位置都可以。
4 在matlab中配置Cplex,就是把几个路径放入matlab,让matlab可以找到就行。或者说相当于设置环境变量。
5 测试,matlab+Cplex+Y链接完毕以后要测试
测试文件链接给出 https://pan.baidu.com/s/1dFswTaT 密码xpjv
6 问题发现
报错,怎么办?
找到Y文件夹下的definesolvers.m文件
找到如下字眼
solver(i).subversion = '12.7.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink1270'};
版本号与Cplex版本要一致,就是如果Cplex的版本是12.7.1,那么所有涉及到12.7.0的参数都要改成12.7.1
然后重新测试样例程序,成功
7 由于Cplex比较难下载,分享可以从这个网址下载
http://pan.baidu.com/s/1pKQYpxp
8 总结一下,matlab+Cplex总的来说就是设置一下环境变量。具体代码怎么写?还是比较简单的。那么下面,有三条路,就依赖matlab,依赖C++,依赖C。下一步,看看怎么和C联系起来。
9 先具体看一下matlab中是怎么用cplex
几个语言要解释一下
x = sdpvar(2, 1, 'full');
Objective = sum(x);
Constraints = [c'*x >=0.6, x>=0];
options = sdpsettings('verbose',1,'solver','cplex');
sol = solvesdp(Constraints,Objective,options);
if sol.problem == 0
str = ['The optimal objective value is = ', num2str(double(Objective))];
display(str);
str = ['The value of x (1) = ', num2str(double(x(1)))];
display(str);
str = ['The value of x (2) = ', num2str(double(x(2)))];
display(str);
else
str = 'Something wrong occurs!';
display(str);
end
10 保存文件的语句是
一开始出错了,后来把文件路径,不是添加路径,然后就可以正常输出了。
11 C++如何调用Cplex?
我还不知道如何用C调用Cplex,而且网上资料没有,目前还没有找到对口资料。所以,怎么调用还要看官方文档。先看看怎么用C++call
12 通过官网上搜matlab+cplex看看官网是怎么介绍用matlab调cplex
官网说了一些废话,或者说没用的,但是详细。
至于怎么添加路径却没有细说。但是大差不差。也就是说官网上的内容我是可以相信的。
13 安装文件中有example,这可以学学
IBM网站上只介绍了matlab call cplex,VS怎么调Cplex还真不知道。网上也只有很少的几篇文章。难哪。
14 问题还是一是怎么用配置,用vs来配置,然后才是怎么调用。找到一篇文章
https://wenku.baidu.com/view/d60edc93aeaad1f347933f5f.html
安装cplex
- 添加头文件路径,类似matlab中也要添加路径,matlab是添加完路径(cplex和ymilp路径)之后直接跑程序就行,这样看来vs也应该差不多
由于安装的cplex版本不同,可能具体路径也太不一样
均需要添加cplex自身的.h与concert目录下的.h文件所在目录,这个步骤解决的也正是API函数头文件寻找不到的问题。 - 在你的项目中添加静态库依赖项,这个在matlab中没有,所以,还要到其他地方求证一下
由于cplex版本不同,或是vs版本不同、需求不同,具体路径不一样,举例说:若你装的是vs2010,那么相应的lib就在D:\StudySoft\CPLEX\concert\lib\x86_windows_vs2010... ;若你需要用的是静态多线程,而非我上文中对应的动态多线程,相应的lib目录就换作D:\StudySoft\CPLEX\cplex\lib\x86_windows_vs2008\stat_mta...,但无论如何,你都得添上三个lib,两个在cplex目录下,一个在concert目录下。
这个步骤解决的是API函数木有定义的问题。 - 在C++预处理器中添加IL_STD,在标准库中使点不点h的头文件们相认,这个步骤解决的是你明明 #include <***> ,编译器始终报错cannot find ***.h的问题
- 将配置选项设为“release”而不是“debug”
- 在项目属性中将C/C++|代码生成
- 在项目中添加动态链接库D:\StudySoft\CPLEX\cplex\include\ilcplex\cplex123.dll,这个步骤解决的是编译“找不到cplex101.dll”的问题
- 另外两个资源
D:\StudySoft\CPLEX\cplex\c_cpp.html
http://blog.sina.com.cn/s/blog_50c154510100g81w.html
14.1 看一下官方文档,最权威了
create a C or C++ project and link the target with CPLEX
project在vs里面我们建的是空项目
link a targe是什么意思?
build an example 是什么意思?
CPLEX Optimizers installation folder安装文件,安装目录
Throughout this document,
the CPLEX installation folder is referred to as <CPLEXDIR>
the Concert Technology installation folder is referred to as <CONCERTDIR>
Concert Technology installation folder是什么意思?
For example,
if CPLEX Studio has been installed in the folder C:\Program Files\IBM\ILOG\CPLEX_Studio1270 references to <CPLEXDIR>\include represent C:\Program Files\IBM\ILOG\CPLEX_Studio1270\cplex\include.
Concert Technology is located in C:\Program Files\IBM\ILOG\CPLEX_Studio1270\concert.
Libraries
IBM提供了很多mannual, 但是第一步是怎么在vs中设置,让一个小程序能够跑起来,然后再谈怎么编程。
所以,怎么配置的参考资料还是在安装目录下的c_cpp.html
但是这个文档都是英语,而且没有图片,所以,一些中文的参考资料非常必要,下面推荐三篇文章:
http://blog.sina.com.cn/s/blog_50c154510100g81w.html
http://blog.sina.com.cn/s/blog_50c154510100r0nm.html
http://wap.sciencenet.cn/blogview.aspx?id=511626
根据这三篇文章和官方文档,操作步骤如下
Start Microsoft Visual Studio 2015.
From the File menu, choose Open > Project/Solution....
The Open Project dialog box appears.
就是打开VS,然后打开项目,一个范例,在example文件中
- Select the folder
-
<CPLEXDIR>\examples\x64_windows_vs2013\stat_mda.
Select the examples.sln file and click Open.
打开后如图:
然后是build其中一个cpp文件,叫blend,找到并选中blend源文件,From the Build menu, choose Build blend.中文意思是在生成选项卡中选择生成blend,如图
稍等片刻就得到如下结果
下面就是运行这个build完成后生成的exe文件
打开一个命令提示符
我是任选一个,按理应该都可以用的。
添加路径Type set path=%path%;<CPLEXDIR>\bin\x64_win64 so that cplex1270.dll is on the path.
运行程序:Type <CPLEXDIR>\examples\x64_windows_vs2013\stat_mda\blend.
这里遇到一个问题,如果路径是C:\Program Files\IBM\。。。遇到空格会报错。解决方法就是把blend.exe文件考出来,放在c盘根目录下,运行就可以得到结果啦
15 上面是一个现成的项目,如何做我自己的项目?
这个官方文档也介绍了
Building your own project which links with CPLEX
multi-threaded DLL STL library多线程DLL,STL库,
下面新建的项目的设置很麻烦,其实有个很简单的方法,就是在已经有的例子的example某个例子下面直接复制一份,在该例子的文件里面写上自己的代码即可,省的下面新建的文件需要设置很多参数环境,还挺麻烦的说。
Let's assume that you want to build a target named test.exe and have:
a source file named test.cpp which uses Concert Technology or test.c which uses the C API of the CPLEX Callable Library;
a folder where this file is located and which, for the sake of simplicity, we'll refer to as <MYAPPDIR>.
里面有个关键的话,c文件也能用,但是要用Callable Library中的C API
One way to achieve that goal is to create a project named test.vcxproj as described here. Be aware that the order of instructions is important. 按照他的步骤做
Start Microsoft Visual Studio 2013.
The next step is to create the test.sln solution.
From the File menu, select New > Project....
In the Installed Templates pane, select Visual C++ and Win64.
In the middle pane, select the Win64 Console Application icon.
Fill in the project name (test).
If necessary, correct the location of the project (to <MYAPPDIR>).
15 如何使用c++调用cplex?
关于c++或是其他编程语言API的使用,可参看cplex用户手册
安老师说看example