如何获取docpelx求解目标函数后的数据;在解决目标优化问题之后,如何获取相关数据;获取决策变量的具体数值

news2024/9/29 3:20:59

获取优化问题的自变量取值和目标函数取值

  • 说明
  • 通过 mdl.integer_var() 定义的决策变量,获取求解值
    • 决策变量获取
    • 目标函数取值获取
    • 具体代码:
  • 通过 mdl.continuous_var_list() 定义的决策变量,获取求解值
    • 具体代码

说明

本次的代码环境是 python中的 docplex 库。

通过 mdl.integer_var() 定义的决策变量,获取求解值

决策变量获取

  1. 直接对决策变量使用 .solution_value 获取自变量取值;
  2. 直接对模型的求解结果 mdl.solve() 获取 solution._get_all_values() 方法,获取全部决策变量的输出 (不区分决策变量,哪个是x,哪个是y)
x.solution_value 
solution._get_all_values() 

具体说一下:

solution._get_all_values() 

solution的类型是:
在这里插入图片描述

solution._get_all_values() 是将所有自变量的取值,不区分变量是哪一个(哪个是x, 哪个是y不做区分) 

在这里插入图片描述

目标函数取值获取

  1. 直接对模型 mdl 使用 objective_value 获取目标函数取值;
  2. 直接使用 solution.objective_value 获取。
mdl.objective_value 
solution.objective_value 
 

具体代码:

from docplex.mp.model import Model

# 创建模型
mdl = Model(name='factory_production')

# 定义变量
x = mdl.integer_var(lb=0, name='x')
y = mdl.integer_var(lb=0, name='y')

# 定义目标函数
mdl.maximize(5 * x + 10 * y)

# 定义约束条件
mdl.add_constraint(x + y <= 200)
mdl.add_constraint(2 * x + 3 * y <= 500)

# 求解
solution = mdl.solve()

# 输出结果
print("生产 A 产品的数量:", x.solution_value)
print("生产 B 产品的数量:", y.solution_value)
print("所有变量的取值", solution._get_all_values())

print("最大利润:", mdl.objective_value)
print("最大利润:", solution.objective_value)

运行结果
在这里插入图片描述

通过 mdl.continuous_var_list() 定义的决策变量,获取求解值

  1. 使用列表生成式,遍历每个决策变量,然后使用 .solution_value 属性,获取自变量取值
  2. 使用 mdl.iter_variables() 遍历变量输出
  3. 使用 mdl.solve() 的输出 solution 的 ._get_all_values() 方法,获取所有自变量的取值(不区分决策变量,哪个是x,哪个是y)
## 方式 1 
[xi.solution_value for xi in x]

## 方式 2 
var_dict = {} 
for var in mdl.iter_variables():
    var_dict[var.name] = var.solution_value 
## 方式2的列表生成式 
var_dict = {var.name:var.solution_value for var in mdl.iter_variables()}  

# 方式 3 
solution._get_all_values() 

具体代码

from docplex.mp.model import Model

mdl = Model(name='example_constraints')
x = mdl.continuous_var_list(3, lb=-1.0, ub=1.0, name='x')

constraints = [xi >= -0.5 for xi in x] + [xi <= 0.5 for xi in x]

for constraint in constraints:
    mdl.add_constraint(constraint)
    
obj = mdl.sum(x) 
mdl.maximize(obj) 

solution = mdl.solve()

## 方式 1 
print("x ==>> {}".format([xi.solution_value for xi in x]))

## 方式 2 
var_dict = {} 
for var in mdl.iter_variables():
    var_dict[var.name] = var.solution_value 
## 方式2的列表生成式 
var_dict = {var.name:var.solution_value for var in mdl.iter_variables()}  
print("var_dict  ==>>  ", var_dict)

# 方式 3 
print("solution._get_all_values() ==>>", solution._get_all_values()) 

运行结果
在这里插入图片描述

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

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

相关文章

【WEB安全】SQL注入挖掘

文章目录前言一、sql注入的分类注入漏洞存在位置二、漏洞挖掘Google语法疑似注入点手工挖掘批量挖取此类漏洞已知sql注入漏洞挖掘总结免责声明&#xff1a;前言 2021年OWASP发布漏洞威胁榜单&#xff0c;SQL注入从第一名下降到第三&#xff08;https://owasp.org/Top10/&#…

从0开始学python -34

Python3 输入和输出-2 读和写文件 open() 将会返回一个 file 对象&#xff0c;基本语法格式如下: open(filename, mode)filename&#xff1a;包含了你要访问的文件名称的字符串值。mode&#xff1a;决定了打开文件的模式&#xff1a;只读&#xff0c;写入&#xff0c;追加等。…

数据分析| Pandas200道练习题,使用Pandas连接MySQL数据库

文章目录使用Pandas连接数据库编码环境依赖包read_sql_query()的使用read_sql_table()的使用read_sql() 函数的使用to_sql()写入数据库的操作删除操作更新操作总结&#xff1a;使用Pandas连接数据库 通过pandas实现数据库的读&#xff0c;写操作时&#xff0c;首先需要进行数据…

kubernetes教程 -- k8s组件

k8s组件 maste节点 apiServer&#xff1a;资源操作的唯一入口&#xff0c;接受用户的输入&#xff0c;提供认证&#xff0c;控制访问等功能Scheduler&#xff1a;负责集群的资源调度&#xff0c;按照预定的调度策略将Pod调度到相应的node节点上controllerManager&#xff1a;负…

JVM学习篇剖析JVM类加载机制

1. 类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把主类加载到JVM。 public class Math {private static int initData 6666;public static User user new User();private int compute() {int a 1;int b 3;int c (…

【vue后台管理系统】基于Vue+Element-UI+ECharts开发通用管理后台(下)

文章目录面包屑导航制作效果展示思路分析代码实现过程需求优化用户管理页面效果展示新增用户表单实现table组件编写分页功能编写搜索功能编写附&#xff1a;ES6的解构赋值数组模型的解构&#xff08;Array&#xff09;对象模型的解构&#xff08;Object&#xff09;面包屑导航制…

[Linux篇] Linux常见命令和权限

文章目录使用XShell登录Linux1.Linux常用基本命令&#xff1a;1.1 ls&#xff08;列出当前的目录下都有哪些文件和目录&#xff09;1.2 cd (change directory 切换目录)1.3 pwd&#xff08;查看当前目录的绝对路径&#xff09;1.4 touch&#xff08;创建文件&#xff09;1.5 ca…

数据库系统是什么?它由哪几部分组成?

数据库系统&#xff08;Database System&#xff0c;DBS&#xff09;由硬件和软件共同构成。硬件主要用于存储数据库中的数据&#xff0c;包括计算机、存储设备等。软件部分主要包括数据库管理系统、支持数据库管理系统运行的操作系统&#xff0c;以及支持多种语言进行应用开发…

TestNG单元测试框架-常用注解介绍以及testng和Junit的区别【杭州多测师_王sir】【杭州多测师】...

一、TestNG单元测试框架-常用注解介绍 testng学习网址&#xff1a;https://www.jc2182.com/testng/testng-environment.html 1、Before类别和After类别注解按照如下循序执行BeforeSuite->BeforeTest->BeforeClass->{BeforeMethod->Test->AfterMethod}->After…

微信支付Native下单API接口正确调用姿势

商户Native支付下单接口&#xff0c;微信后台系统返回链接参数code_url&#xff0c;商户后台系统将code_url值生成二维码图片&#xff0c;用户使用微信客户端扫码后发起支付。 文档地址&#xff1a;微信支付-开发者文档 目录 一、Native下单接口简介 二、如何正确调通接口 (…

5. AOP

一、如何定义一个MethodHandler? 1.Controller注解修饰的类 1.注册成Spring Bean 2.表示它是一个SpringMVC下的Controller 2.在这个类下的方法中&#xff0c;只要被RequestMapping修饰&&方法的形参符合规定&#xff08;需要看文档&#xff09; 方法的返回值符合规定…

VK0256/B/C玩具、冷气机等段码液晶驱动芯片(IC)(32EGx8COM)技术资料选表

K PP 2543型号&#xff1a;VK0256/B/C封装形式&#xff1a;QFP64/LQFP64/LQFP52 VK0256/B/C是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大256点&#xff08;32EGx8COM&#xff09;的LCD屏。单片机可通过3/4线串行接口配置显示参数和发送显示数据&#xff0c;也可通过…

与ChatGpt聊天,学习golang标签的反射机制

与ChatGpt聊天&#xff0c;学习golang标签的反射机制引ChatGPT火了以后&#xff0c;本拐先是恐惧&#xff0c;之后是拥抱。最近很多编程知识的学习&#xff0c;都是通过 chatgpt来搞定。众所周知&#xff0c;本拐就是一个啥技术都半斤八两的程序员&#xff0c;这次&#xff0c;…

05服务发现:引入etcd服务注册中心

在分布式微服务架构中,服务注册发现组件(通常称为服务注册中心)往往有着举足轻重的作用,它的性能与稳定可能会直接影响到整个服务的状态,比如Spring Cloud中的Eureka、Dubbo中的Zookeeper等等,接下来我们就gRPC微服务中最常见的服务注册中心etcd,来讲述下两者在具体是怎…

Mr. Cappuccino的第41杯咖啡——Kubernetes之Pod调度策略

Kubernetes之Pod调度策略Pod的4种调度策略定向调度nodeNamenodeSelector亲和性调度node亲和性硬限制软限制关系运算符pod亲和性pod反亲和性污点和容忍污点&#xff08;taints&#xff09;容忍&#xff08;tolerations&#xff09;默认情况下&#xff0c;Scheduler计算出一个Pod…

conda 搭建tensorflow-GPU和pycharm以及VS2022 软件环境配置

conda 搭建tensorflow-GPU和pycharm以及VS2022 软件环境配置一、TensorFlow 环境配置安装1. Anaconda下载安装2.conda创建tensorflow环境二、pycharm以及VS2022 环境配置2.1 pycharm 软件安装以及环境配置2.2.1 pycharm 软件安装2.2.2 pycharm 软件conda环境配置2.2 Visual Stu…

注意!华为折叠屏手机的原厂膜不能自己撕!

对于用惯了直板手机的朋友来说&#xff0c;新机开箱撕膜是一件十分有“仪式感”的事情&#xff0c;但是对于折叠屏手机来说&#xff0c;这样的操作万万不可。华为折叠屏手机在使用的过程中也有着和传统智能手机不一样的注意事项&#xff0c;下面这几点大家在入手折叠屏手机之后…

如何利用Power Virtual Agents机器人进行设备维修登记

今天我们来介绍如何利用PVA聊天机器人进行设备维修登记。设计思路是在PVA聊天机器人的对话框中输入“设备维修”触发短语后进行设备维修登记&#xff0c;然后通过自动化流程将维修信息存入到Lists中并通过邮件的形式发送给负责设备维修的人员。 首先&#xff0c;在PVA聊天机器人…

【yolov5】将标注好的数据集进行划分(附完整可运行python代码)

问题描述 准备使用yolov5训练自己的模型&#xff0c;自己将下载的开源数据集按照自己的要求重新标注了一下&#xff0c;然后现在对其进行划分。 问题分析 划分数据集主要的步骤就是&#xff0c;首先要将数据集打乱顺序&#xff0c;然后按照一定的比例将其分为训练集&#xf…

【Blender】使用Blender渲染一段360度旋转的动画

目录一、前言二、方法描述三、渲染设置四、结果一、前言 本文主要讲述了如何使用Blender渲染一段物体360度旋转的动画。 渲染好的效果如下&#xff1a; 二、方法描述 第一步&#xff1a;shiftA&#xff0c;我们在Blender里新建一个平面 第二步&#xff1a;摁s键(scale)&…