cplex基础入门(一)

        这边文章会以纯新手小白的视角,教会大家如何快速的搭建自己的cplex模型,做到求解模型不求人。

目录

一、引言

1、掌握数据类型及数据结构

2、常规Cplex编程方法

3、Cplex编程步骤

4、cplex 程序框架

5、创建模型

二、规划建模的入门求解案例

1、不使用集合语言的案例

2、使用集合语言案例


一、引言

在讲述基础入门案例之前,需要大家明白几个核心概念,以及内功心法。

1、掌握数据类型及数据结构

        数据类型以及数据结构,转到Cplex的数据类型结构及基本语法功能,请先自行学习。

2、常规Cplex编程方法

        有2中形式。
        1)不使用集合语言,你可以直接理解为显性数学表达式。

        Example 求解如下模型

min z = 2x+3y

s.t.  2x + 3y >=20,
      x  +  y >=10,
      x,y >=0且为整数

        2)使用集合语言.(sum,forall...)

        主要思想:
                ①多个式子之和

                        a_{1}x_{1}+a_{2}x_{2}+...+a_{n}x_{n} = \sum_{j=1}^{n}a_{j}x_{j}

                   转为:  sum (j\, \, in \, \, 1..n) \, \, a[j] \ast x[j]\,

                ②多个约束条件
                \left\{\begin{matrix} x_{1} <=b_{1} & \\ x_{2} <=b_{2}& \\ x_{3} <=b_{3} & \end{matrix}\right.

        很显然,这可以转化为:x_{j} <=b_{j}\, j=1,2,...n

        在cplex中,我们又该如何表达呢?

                        forall\, (j\, in\, 1..n)\, \, x_{j} <=b_{j}

3、Cplex编程步骤

        ①正确地表达清楚数学规划模型
        ③确定模型中的已知量、未知量(类型、及范围等)
        ③编写程序

4、cplex 程序框架

  • 定义已知星(int,float,range,..)
  • 定又未知量(dvar  int,float,boolean,int+,float+)
  • 定义目标函数:maximize,minimize
  • 定义约束条件:subject to {...}
  • 补充,有些程序会补充脚本文件
  • 【脚本】execute{...}

5、创建模型

        ①首先通过文件,点击文件--新建--模型 

        ②编写模型

         ③运行模型,这里往往是很多新手小白不会的地方,这里将会重点讲述。

        第一步:点击该项目,新建一个运行配置文件,并需要英文命名它。

         如果运行文件与你的模型脱节,不在一个文件下,需要拖动模型到运行配置里,直到形成上面截图的那样,即可。

        第二步:直接点击配置文件,截图上面的config1,右键-->直接运行这个文件,即可。

最终结果如下:

 

二、规划建模的入门求解案例

1、不使用集合语言的案例

如上面的案例说明

min z = 2x+3y

s.t.  2x + 3y >=20,
      x  +  y >=10,
      x,y >=0且为整数

已在1.5里以这个例子进行了阐述,不在过多讲述。

2、使用集合语言案例

2.1 背包问题

        x_{j}\, =\, 1,表示物品j 放入背包中,若相反则为0。

        其背包问题的数学规划模型为:

        max\, \, z = \, \sum_{j=1}\, p_{j}\ast x_{j}

        s.t.    \sum_{j=1}^{n}\, w_{j}\ast x_{j}\leq C

                x_{j} \epsilon \left \{ 0,1\right \}\, j=1,2,...n

我们先分析,已知变量有p,w,C,n,未知变量有x。根据程序框架,写出的程序如下:

 接着运行模型,此时需要新建一个运行配置文件,点击配置文件,并命名为config2,如下

最终运行的结果为:

 2.2 指派问题

指派问题的数学模型为:

        min \: \sum_{i=1}^{n}\sum_{j=1}^{n}\: c_{ij}\,x _{ij}

        s.t.  \sum_{i=1}^{n}\: x_{ij}=1,j=1,2...n  .............. (每项工作只有一个人做)

                \sum_{j=1}^{n}\: x_{ij} =1,i=1,2...n ...............(每个人只做一项工作)

                x_{ij} = 0,1,i,j=12,...n

指派矩阵为:

c = [3    8    2    10    3

       8    7    2     9     7

       6    4    2     7     5

       8    4    2     3     5

       9  10    6     9    10 ]

同理,我们先分析模型中哪些变量是已知变量,哪些是未知变量,最终写出的程序模型为:

留意:cplex中等号是用==表示的。

结果为:

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python3数据分析与挖掘建模(3)探索性数据分析

1. 概述 探索性数据分析&#xff08;Exploratory Data Analysis&#xff0c;EDA&#xff09;是一种数据分析的方法&#xff0c;用于探索和理解数据集的特征、关系和分布等。EDA旨在揭示数据中的模式、异常值、缺失值等信息&#xff0c;并为后续的分析和建模提供基础。以下是关…

CISCN 2023 初赛 pwn——Shellwego 题解

这是一个用go语言写的elf程序&#xff0c;没有PIE。这也是本蒟蒻第一次解go pwn题&#xff0c;故在此记录以便参考。 而且&#xff0c;这还是一个全部符号表被抠的go elf&#xff0c;直接面对一堆不知名的函数实在有些应付不来&#xff0c;因此在比赛时委托逆向的队友把符号表…

​【指针与数组的恩怨情仇】

指针和数组的关系 指针指的是指针变量&#xff0c;不是数组&#xff0c;指针变量的大小是4/8个字节&#xff0c;是专门来存放地址的。数组也不是指针&#xff0c;数组是一块连续的空间&#xff0c;存放一组相同类型的数据的。 没有关系&#xff0c;但是它们之间有比较相似的地方…

【Netty】一行简单的writeAndFlush都做了哪些事(十八)

文章目录 前言一、源码分析1.1 ctx.writeAndFlush 的逻辑1.2 writeAndFlush 源码1.3 ChannelOutBoundBuff 类1.4 addMessage 方法1.5 addFlush 方法1.6 AbstractNioByteChannel 类 总结 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构设…

好用的Chrome浏览器插件推荐(不定期更新)

好用的Chrome浏览器插件推荐 1.1 CSDN-浏览器助手1.2 Google 翻译1.3 JSON Viewer1.4 ModHeader - Modify HTTP headers1.5 Octotree - GitHub code tree 1.1 CSDN-浏览器助手 CSDN-浏览器助手 是一款集成本地书签、历史记录与 CSDN搜索(so.csdn.net) 的搜索工具 推荐&#x…

自动驾驶车载MCU开发修炼秘籍

目录 车载MCU开发修炼秘籍1、恩智浦 S32K1XX系列2、英飞凌 AURIX TC3XX3、嵌入式实时操作系统-FreeRTOS4、车载实时操作系统-AUTOSAR 车载MCU开发修炼秘籍 1、恩智浦 S32K1XX系列 S32K14X学习笔记&#xff08;一&#xff09;–S32K汽车MCU资源总结 S32K14X学习笔记&#xff1a…

第二章 数据类型、运算符与表达式

如何打开项目 如何打开已经存在的解决方案&#xff1f; 找到要打开的解决方案目录&#xff0c;进去之后双击后缀为.sln的文件即可打开该解决方案。 或者从最近打开项目中打开&#xff1a; Online Judge使用 OJ简介 在线判题系统&#xff08;Online Judge&#xff0c;缩写OJ…

WebService接口测试

WebService的理解 WebService就是Web服务的意思&#xff0c;对应的应用层协议为SOAP&#xff08;相当于HTTP协议&#xff09;&#xff0c;可理解为远程调用技术。 特点&#xff1a; 客户端发送的请求主体内容&#xff08;请求报文&#xff09;的格式为XML格式 接口返回的响…

【P36】JMeter 交替控制器(Interleave Controller)

文章目录 一、交替控制器&#xff08;Interleave Controller&#xff09;参数说明二、测试计划设计 一、交替控制器&#xff08;Interleave Controller&#xff09;参数说明 可以将内部的组件在线程迭代时交替执行&#xff1b;交替控制器内部一般会有多个取样器 选择线程组右…

黑马Redis视频教程高级篇(一:分布式缓存)

目录 分布式缓存 一、Redis持久化 1.1、RDB持久化 1.1.1、执行时机 1.1.2、RDB原理 1.1.3、小结 1.2、OF持久化 1.2.1、AOF原理 1.2.2、OF配置 1.2.3、AOF文件重写 1.3、RDB与AOF对比 二、Redis主从 2.1、搭建主从架构 2.1.1、集群结构 2.1.2、准备实例和配置 …

多层级table联动

elementui 多层级table联动&#xff1a; 引用&#xff1a; https://blog.csdn.net/weixin_44780971/article/details/130054925 https://blog.csdn.net/qq_42581563/article/details/114325920 需要了解的属性&#xff1a; select-all 全选的时候执行select &#xff1a; 选择…

linux高级---k8s中的五种控制器

文章目录 一、k8s的控制器类型二、pod与控制器之间的关系三、状态与无状态化对特点四、Deployment1、Deployment的资源清单文件2、在配置清单中调用deployment控制器3、镜像更新4、金丝雀发布5、删除Deployment 五、Statefulset六、DaemonSet1、daemonset的资源清单文件2、在配…

点到直线距离

点到直线距离最小二乘解释 推倒部分 形象描述是C到AB距离最短&#xff0c;也就是CD最短用数学语言描述是 m i n ∣ ∣ ( B − A ) λ A − C ∣ ∣ min||(B-A) \lambda A - C || min∣∣(B−A)λA−C∣∣ 其中 D ( B − A ) λ A D (B-A) \lambda A D(B−A)λA,其实本质…

使用Windbg动态调试目标进程的一般步骤及相关要点详解

目录 1、概述 2、将Windbg附加到已经启动起来的目标进程上&#xff0c;或者用Windbg启动目标程序 2.1、将Windbg附加到已经启动起来的目标进程上 2.2、用Windbg启动目标程序 2.3、Windbg关联到目标进程上会中断下来&#xff0c;输入g命令将该中断跳过去 3、分析实例说明 …

macOS Ventura 13.5beta2 (22G5038d)发布

系统介绍 黑果魏叔 6 月 1 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 2 更新&#xff08;内部版本号&#xff1a;22G5038d&#xff09;&#xff0c;本次更新距离上次发布隔了 12 天。 macOS Ventura 带来了台前调度、连续互通相机、Fac…

FPGA基于AXI 1G/2.5G Ethernet Subsystem实现千兆UDP通信 提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、详细设计方案传统UDP网络通信方案本方案详细设计说明UDP层设计AXIS-FIFOAXI 1G/2.5G Ethernet Subsystem&#xff1a;输出 4、vivado工程详解5、上板调试验证并演示系统配置UDP数据回环测试注意事项 6、福利&#xff1a;工程代码的获取 1…

RK3588平台开发系列讲解(项目篇)RKNN-Toolkit2 的使用

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、RKNN-Toolkit2安装二、模型转换和模型推理三、性能和内存评估沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 NPU 是专门用于神经网络的处理单元。它旨在加速人工智能领域的神经网络算法,如机器视觉和自…

如何在 Linux 中进行网络地址转换 (NAT)?

网络地址转换&#xff08;Network Address Translation&#xff0c;简称NAT&#xff09;是一种在网络中使用的技术&#xff0c;它允许将私有网络中的IP地址映射到公共网络上&#xff0c;从而实现多个设备共享单个公共IP地址。在Linux系统中&#xff0c;我们可以使用一些工具和配…

《Web安全基础》01. 基础知识

基础 1&#xff1a;概念名词1.1&#xff1a;域名1.2&#xff1a;DNS1.3&#xff1a;网站开发语言1.4&#xff1a;后门1.5&#xff1a;Web1.6&#xff1a;Web 相关安全漏洞 2&#xff1a;数据包2.1&#xff1a;HTTP2.2&#xff1a;HTTPS2.3&#xff1a;请求数据包2.3.1&#xff…

MySQL 数据操纵语言 DML

文章目录 数据操纵语言 DMLINSERT 语句UPDATE 语句DELETE 语句 数据操纵语言 DML 数据操纵语言&#xff08;Data Manipulation Language&#xff0c;DML&#xff09;是 SQL 语言的核心部分之一。在添加、更新或者删除表中的数据时&#xff0c;需要执行 DML 语句。很多时候我们提…