运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(上)

简介: 运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex

1 C++调用Cplex的在VS2010中的配置及示例代码演示

1.1 cplex在vs2010中的配置

  • 正常建立一个控制台项目
  • 在【项目--属性】下,作如下设置:
  • 【C/C++】--【常规】--【附加库目录】,添加如下两个库目录:
你的安装位置\concert\include
你的安装位置\cplex\include
  • 【C/C++】--【预处理器】--【预处理器定义】,粘贴如下内容:
WIN32
NDEBUG
_CONSOLE
_LIB
IL_STD
  • 【连接器】--【附加库目录】,选中如下两个路径:

你的安装路径\concert\lib\x86_windows_vs2010\stat_mda

你的安装路径\cplex\lib\x86_windows_vs2010\stat_mda

  • 【连接器】--【附加依赖项】,复制以下内容:
concert.lib
cplex1261.lib
ilocplex.lib

1.2 测试示例

1.2.1 测试用例

gif.png

1.2.2 测试代码

//**************************************************************//
// the test version of Cplex with C++
// time 2019-09-28
// author A & R
//*************************************************************//
#include <ilcplex/ilocplex.h>
#include<cstdlib>
#include<iostream>
ILOSTLBEGIN //#define ILOSTLBEGIN using namespace std;
int main(int argc, char **argv)
{
  IloEnv env;//construct an Cplex environment env, which belongs to a handle class IloEnv;
  try{
  IloModel model(env);// define the varies "env"
  IloNumVarArray vars(env);// define the varies vars(env), the x1, x2, x3 can be expressed with vars(0), vars(1), vars(2)
  // define the bounds of varies
  vars.add(IloNumVar(env, 0.0, 40.0));
  vars.add(IloNumVar(env));
  vars.add(IloNumVar(env));
  //objective to optimize:
  model.add(IloMaximize(env, vars[0]+2*vars[1]+3*vars[2]));//opjective: Maximize the x1+2*x2+3*x3;
  //subject to:
  model.add(-vars[0]+vars[1]+vars[2]<=20);
  model.add(vars[0]-3*vars[1]+vars[2]<=30);
  //expection processing, refer to "C++ try&catch"
  IloCplex cplex(model);
  if(!cplex.solve()){
  env.error()<<"Failed to optimize LP."<<endl;
  throw(-1);
  }
  IloNumArray vals(env);
  env.out() << "solution status = "<< cplex.getStatus() << endl;
  env.out() << "Solution value=" << cplex.getObjective() << endl;
  cplex.getValues(vals, vars);
  env.out() << "Values = " << vals << endl;
  }
  // cathch functions, refer to "C++ try&catch"
  catch(IloException&e){
  cerr << "Concert exception caught:" << e << endl;
  }
  catch(...){
  cerr << "Unknown exception caught" << endl;
  }
  env.end();
  //return 0;
  system("PAUSE");
  return EXIT_SUCCESS;
}

1.2.3 运行结果

20190928110724786.png


2 C#调用Cplex在VS2010下的配置

2.1 C#配置Cplex

这个配置比较简单,直接添加两个引用即可


你的Cplex安装目录\cplex\bin\x86_win32\ILOG.CPLEX.dll"

你的Cplex安装目录\cplex\bin\x86_win32\ILOG.Concert.dll"


2.2 算例测试及代码

2.2.1 算例代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ILOG.Concert;
using ILOG.CPLEX;
namespace csCplex
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //1 先创建一个Cplex空模型
                Cplex cplexModel = new Cplex();
                //2 生成决策变量并赋值
                INumVar[][] deVar = new INumVar[1][];
                double[] lowerBound = { 0.0, 0.0, 0.0};
                double[] upBound = { 40.0, double.MaxValue,double.MaxValue };
                string[] deVarName = { "x1", "x2", "x3"};
                //包含两个变量,下界,上界,变量名称
                INumVar[] X = cplexModel.NumVarArray(3, lowerBound, upBound, deVarName);
                deVar[0] = X;
                //定义模型目标函数的系数
                double[] objCoff = { 1.0, 2.0, 3.0 };
                cplexModel.AddMaximize(cplexModel.ScalProd(X, objCoff));
                //3 添加约束条件
                IRange[][] rng = new IRange[1][];
                rng[0] = new IRange[2];
                //添加小于等于约束
                rng[0][0] = cplexModel.AddLe(
                            cplexModel.Sum(cplexModel.Prod(-1.0, X[0]), cplexModel.Prod(1.0, X[1]),cplexModel.Prod(1.0, X[2])), 
                            20, "约束1");
                rng[0][1] = cplexModel.AddLe(
                            cplexModel.Sum(cplexModel.Prod(1.0, X[0]), cplexModel.Prod(-3.0, X[1]), cplexModel.Prod(1.0, X[2])),
                            30, "约束2");
                //4 导出模型
                cplexModel.ExportModel("C#调用Cplex演示示例模型.lp");
                //5 求解模型
                if (cplexModel.Solve())
                {
                    int nvars = cplexModel.GetValues(deVar[0]).Length;
                    for (int i = 0; i < nvars; i++)
                    {
                        cplexModel.Output().WriteLine("x" + i + "=" + cplexModel.GetValues(deVar[0])[i]);
                    }
                }
                cplexModel.End();
            }
            catch(ILOG.Concert.Exception e)
            {
                System.Console.WriteLine("concert exception:" + e);
            }
            finally
            {
                System.Console.WriteLine("模型求解完毕");
            }
        }
    }
}

2.2.3 运行结果

20190928120332678.png

201909281203529.png


3 Java语言调用Cplex的配置与示例演示

注意java的位数要与Cplex的位数一致,64位与32位不兼容

3.1 配置

  • 添加环境变量

您的Cplex安装路径\cplex\bin\x86_win32\cplex1261.dll

您的Cplex安装路径\cplex\lib\cplex.jar

  • 设置构建路径,【你的java项目,右键】--【Bulid Path】--【Condigure Build Path..】--【Existing Project into Workspce】--【Next】

20190928121841245.png

  • 【Add External jars】,选择你安装位置下的\cplex\lib\cplex.jar

20190928122236347.png

  • 配置库

2019092812334616.png


相关文章
|
6月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
7月前
|
JSON API UED
运营商二要素验证 API:核验身份的一致性技术实践(Python示例)
随着线上业务快速发展,远程身份核验需求激增。运营商二要素验证API通过对接三大运营商实名数据,实现姓名、手机号、身份证号的一致性校验,具备权威性高、实时性强的优势,广泛应用于金融、电商、政务等领域。该接口支持高并发、低延迟调用,结合Python示例可快速集成,有效提升身份认证的安全性与效率。
716 0
|
7月前
|
JSON API 数据格式
Python采集京东商品评论API接口示例,json数据返回
下面是一个使用Python采集京东商品评论的完整示例,包括API请求、JSON数据解析
|
7月前
|
测试技术 API 开发者
淘宝关键词搜索商品列表API接入指南(含Python示例)
淘宝关键词搜索商品列表API是淘宝开放平台的核心接口,支持通过关键词检索商品,适用于比价、选品、市场分析等场景。接口提供丰富的筛选与排序功能,返回结构化数据,含商品ID、标题、价格、销量等信息。开发者可使用Python调用,需注意频率限制与错误处理,建议先在沙箱环境测试。
|
7月前
|
JSON API 数据格式
洋码头商品 API 示例指南(Python 实现)
洋码头是国内知名跨境电商平台,提供商品搜索、详情、分类等API接口。本文详解了使用Python调用这些API的流程与代码示例,涵盖签名生成、请求处理及常见问题解决方案,适用于构建选品工具、价格监控等跨境电商应用。
|
7月前
|
JSON API 开发者
一号店商品 API 示例指南(Python 实现)
本教程介绍如何使用 Python 调用一号店商品 API,涵盖商品搜索、详情、分类等接口的调用方法。内容包括注册认证、签名生成、代码实现及常见问题解决方案,并提供完整示例代码,帮助开发者快速接入一号店开放平台,构建电商工具与数据分析应用。
|
7月前
|
缓存 JSON API
VIN车辆识别码查询车五项 API 实践指南:让每一俩车有迹可循(Python代码示例)
VIN(车辆识别代码)是全球唯一的17位汽车标识码,可快速获取车架号、发动机号、品牌型号等核心信息。在二手车交易、保险理赔、维修保养等场景中,准确解析VIN有助于提升效率与风控能力。本文介绍VIN码结构、适用场景,并提供Python调用示例及优化建议,助力企业实现车辆信息自动化核验。
1186 1
|
7月前
|
JSON API UED
快递查询 API 对接指南(Python示例)
在电商与物流快速发展背景下,实时快递查询成为系统开发常见需求。本文介绍如何通过快递查询API快速集成物流信息,提升自动化水平与用户体验,并提供Python调用示例及问题解决方案。
631 0
|
8月前
|
人工智能 安全 API
身份验证API的实战指南(Python & PHP 示例)
本文介绍了基于身份证信息的实名认证API,适用于金融、电商、政务、医疗等领域的身份核验场景。内容包含Python与PHP调用示例及返回结果解析,助力开发者快速集成安全合规的身份验证功能。
537 0
|
8月前
|
JSON 缓存 API
身份证二要素核验接口调用指南 —— Python 示例
本文介绍如何在 Python 中快速实现身份证二要素核验功能,适用于用户注册、金融风控等场景。通过阿里云市场提供的接口,可校验「姓名 + 身份证号」的一致性,并获取性别、生日、籍贯等信息。示例代码展示了从环境变量读取 APP_CODE、发送 GET 请求到解析 JSON 响应的完整流程。关键字段包括 code(1-一致,2-不一致,3-无记录)、msg 和 data。常见问题如 403 错误需检查 AppCode,超时则优化网络或设置重试机制。集成后可根据业务需求添加缓存、限流等功能提升性能。
686 4

推荐镜像

更多