Cplex的数据类型结构及基本语法功能

news2024/10/6 6:40:02

        本序列将会重开一门新的序列----数学求解器cplex,文章不做简单介绍,不灌水,直接给大家进行讲述如何上手实操,并有针对性的给出相应案例分析。

OPL编程

        OPL是ILOG团队为运筹学专家量身定制的一种优化建模语言,语法相对简单,约束定义接近运筹学专家习惯的属性模型表达。表达更为简洁,描述同样约束,OPL更为简单明了,易于检查排错。有助于开发者专注于模型的开发,而不必花很大精力将数学模型转换为复杂的程序语言

        在学习任何一门新的语言也好,工具也好,我们都需要先熟悉其基本的结构与功能,本文将讲述cplex的基本数据结构与基本的语法功能。

1、基础数据类型

cplex的数据结构有点类似C,其常用的数据结构类型包含有:  

1. 整数型
2. 浮点数型
3. 字符串型
4. 布尔型

 1.  整数型: 范围 −2^31+1, 2^31−1;关键词 int
     int truckQty = 10;
     int n = 20;
     int size = n * n;

2. 浮点型: 双精度;  关键词 float
      float unitCost = 2.0;
      float totalCost = n * unitCost;

execute {
   writeln("truckQty = ", truckQty);
   writeln("size = ", size);
   writeln(" unitCost = ", unitCost);
   writeln("totalCost = ", totalCost);
 }

 3.  字符串型:关键词 string
     1) string company = “大华技术”;
     2)string retailerName = “沃尔玛”;
     3) 字符串中的特殊字符: \t  tab
      \n  newline   \”  双引号   \\   反斜杠
     4)  OPL中字符串换行
       string address = “上海市  \             临港新城”;

 4. 布尔型: 关键词 boolean
     dvar boolean x;
     dvar boolean isUsed;

2、基础的数据结构

cplex中包含的数据结构包含有

1. 范围:range
2. 数组: 给出元素的数据类型
3. 元组:tuple
4. 集合:给出元素的数据类型

1. Range:给定最小值和最大值
   1) range  rows = 1..10;
   2) int n = 8;  
      range cols = n+1..2*n+1;
   3)用于数组定义
      int A[rows] = …;
   4) 用于变量取值范围定义
      dvar int x in rows;
   5) 用于循环
       forall( r in rows){  语句1}

 2. 数组 :
  一维数组
  int a[1..4] =[10,20,30,40];
  float  f[1..4] = [2.0,3.0,4.0,5.0];
  string days[1..2] = [“Mon”,”Tue”]
 
execute{
   writeln("a",a);
   writeln("f",f);
   writeln("days",days);
}

 2. 数组 :
  二维数组
  int b[1..2][1..4] =[[10,20,30,40],[2,3,4,5]];
  float  tranCost[1..2][1..4] = …;
execute{
   writeln("b", b);
}

  3. tuple (元组 ):
    //卡车元组
   tuple TTruck {
      key int id;
      float fixedCost;
      float capacity;}
 //客户元组
 tuple TCustomer {
 key int id;
 float demand;
 float serviceTime; }

 4. 集合:
    可以用{T} 或 setof{T}的方式来定义集合
     {string}  days = {“Mon”, “Tue”, “Wen”};
      setof(int)  s1={1,2,3};
     //配送中心所有的卡车集合
    {TTruck}  trucks = ...;
     //配送中心服务的客户的集合
    {TCustomer} customers =...;

3、基本语法功能

addadd constraints to the problem
baroptsolve using barrier algorithm
displaydisplay problem, solution, or parameter settings
enterenter a new problem
mipoptsolve a mixed integer program
netoptsolve the problem using network method
optimizesolve the problem
populateget additional solutions for a mixed integer program
primoptsolve using the primal method
readread problem or advanced start information from a file
setset parameters
toolstools for analvsis and debugging of models
writewrite problem or solution information to a file

4、项目文件

在一个典型的OPL项目中,需要包含的文件如下:
主要包含模型文件、数据文件、设置文件、运行文件,具体关系如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/528806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++系列之入门基础知识

💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 命名空间 常见域的种类 常见的域的种类有:全局域,局部…

快速构建springboot项目

需求:浏览器发送 /hello 请求,服务器接受请求并处理,响应 Hello World 字符串分析 构建 Spring Boot 项目,事实上建立的就是一个 Maven 项目 1.创建maven 工程 在 IDEA上新建一个空的jar类型 的 maven 工程 2.修改pom.xml 1.在…

【Tkinter.Floodgauge】当程序需要长时间运行,可以用这个组件显示进度【文末附源码地址】

文章目录 效果展示源码解析导包Floodgauge组件界面初始化创建窗口修改数值运行 源码地址 效果展示 我在使用tkinter进行界面化操作的时候,会遇到运行很慢的程序,比如:爬虫下载视频、压缩解压文件,这些操作会很耗时间。 Floodgau…

力扣 ~ JavaScript ~ 35. 搜索插入位置

《跃动青春》好可爱的女孩子的友谊哇 35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: …

redis(12)

1)添加地理位置坐标:已经添加的数据,无法再添加 geoadd key 经度 纬度 变量名字 geoadd china:city 121.47 31.23 shanghai 2)获取指定地区的坐标值: geopos key member(变量名字) geopos china:city shnaghai 3)获取到两个坐标之间的距离,后面是可选参…

95后的自述,文科女吃上IT饭了,历经5个月学习成功上岸软件测试......

想不到我一个女文科生也能吃上IT饭,真的是太香了!!! 程序员的待遇怎么这么好!(请大家原谅我没有见过市面的感叹,对于我这种刚上岗的新手而言,能够在厦门这个全国工资房价比最低的地方…

景区手绘图的配准、切图及上传

目录 1 增加一个项目 2 基础配置 3 获取自动上传需要的3个参数 3.1 生成切片上传验证码 3.2 按F5刷新页面 3.3 查看验证码以及其他2个参数 4 配准 5 切图 6 到迅达平台看一下切图效果 7 软件免费下载 这个免费客户端专用于迅达平台,对手绘图背景进行配准&…

java 调用 python 方法

目录 1.JPython 1.1 JPython介绍 1.2 JPython实践 2.使用Runtime.getRuntime()执行python脚本文件,推荐使用 一个项目可能需要用到人工智能算法,在java后端中需要调用python算法,这篇文章就简单介绍一下其中的两种java调用python方法。 …

一个简单的基于QT的图像浏览器

以前学习前端的时候,对于多张图片的布局一般使用瀑布流布局(CSS总结——瀑布流布局_css 瀑布流_黑白程序员的博客-CSDN博客),然后再通过懒加载(如何实现图片懒加载,预加载!! - 简书&…

AutoDL使用百度网盘来进行数据的交互

文章目录 1. 简介 2. 操作2.1. 设置密码2.1.1. 登录网盘 2.2. 访问网盘中的数据2.3. 将数据放入到网盘中 1. 简介 AutoDL上面其实是可以直接使用百度网盘、阿里云盘等公共网盘的,这样传资料的时候就不用通过Xshell慢悠悠的传输了,如果有百度网盘会员的话…

[MTK7621] dhcp.script 脚本分析

该脚本只要完成IP地址、DNS和路由设置。由udhcpc程序调用。调用的函数在下面两个文件中定义: . /lib/functions.sh:定义了一些基础操作,例如配置文件获取等 . /lib/netifd/netifd-proto.sh:定义了IP、DNS和路由的处理函数 在dhcp.…

关于Photoshop中的【Stable-Diffusion WEBUI】插件:Auto.Photoshop.SD.plugin

文章目录 (零)前言(一)PS的插件(1.1)安装(1.2)简评 (零)前言 本篇主要提到Photoshop中的Stable-Diffusion WEBUI插件,相对WEBUI并不算好用&#x…

MySQL 数据库面试题

TOC 1. MySQL 的内连接、左连接、右连接有有什么区别? inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。 left join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记…

STM32F401RET6 LQFP64 (Nucleo-F401RE) uart 打印输出

STM32F401RET6 LQFP64 (Nucleo-F401RE) uart 打印输出 1.STM32F401RET6 芯片情况 2.板子硬件 电源部分,开发板可利用JP5跳帽座子来选择使用USB供电或者使用管脚座子的外部Vin进行供电,无论是哪种供电,都需要经过U4的5V转成3.3V的LDO的再给S…

Simulink中如何获取所需变量对应的时间,并实时传输给其他模块

假设需要将时间信息传输给一个显示器模块,可以按照以下步骤进行操作: 在模型中添加“Clock”模块,将其输出与MATLAB函数“simulinktime”模块进行连接。 在模型中添加一个Scope模块,将其输入与Clock模块的输出进行连接。 运行模型,Scope模块将显示当前的仿真时间。 将Scop…

2023自动化测试选择什么工具或者框架好呢?

自动化测试的工具或者框架在市场上种类是比较繁多的。那么作为软件测试开发者应该怎么去选择呢?笔者觉得可以从测试需求、测试用例复杂度、技能水平和预算等方面去考虑。 Selenium 这是最常用的自动化测试工具之一,它可以模拟用户在不同的浏览器中进行操…

工厂人员定位系统源码,支持智能考勤、工时统计、行为检测、历史轨迹回放、人员管理、电子围栏功能

系统概述: 工厂人员定位系统,采用UWB定位技术,通过在厂区内部署一定数量的定位基站,以及为人员、车辆、物资佩戴标签卡的形式,实时获取人员精确位置,精度高达10cm。 工厂人员定位系统可实现物资/车辆实时定…

【Linux】】Linux权限的理解

一.Linux中的用户 Linux中分为两种用户,分别为: 1.root 用户,也叫超级用户,它的权限非常高,不受其他权限的约束,也就是可以为所欲为; 2.普通用户:除了root用户外,都是普通…

【2023春招】4399 web后台-Java后端开发

目录 一、JVM1.类加载过程2.static和final变量的初始化时机 二、依赖1.Spring Boot 自动装配2.使用依赖过程中遇到问题如何排查3.引入的某个依赖不符合预期,如何处理 三、数据库:1.InnoDB 和 MyISAM 索引的区别2.字符串类型字段,WHERE 数字&a…

枚举【Java】

文章目录 枚举的使用switch语句Enum类的常用方法枚举的构造方法 反射与枚举 在之前的学习中,如果我们需要组织一组枚举类型的数据,我们通常会使用常量来进行定义。但这种定义方式存在一个问题就是:如果在一个程序中,普通常量和使用…