当前位置: 首页 > news >正文

网站开发语言有php网页浏览器历史记录恢复

网站开发语言有php,网页浏览器历史记录恢复,西安网页设计招聘信息,郑州做公司网站的addVar 和 addVars作为 Gurobi模型对象中的方法,常常用来生成变量,本文介绍了Python中的这两个接口的使用 addVar addVar(lb0.0, ubfloat(inf), obj0.0, vtypeGRB.CONTINUOUS, name, columnNone) lb 和 ub让变量在生成的时候就有下界和上届&#xff0c…

addVar 和 addVars作为 Gurobi模型对象中的方法,常常用来生成变量,本文介绍了Python中的这两个接口的使用

addVar

addVar(lb=0.0, ub=float('inf'), obj=0.0, vtype=GRB.CONTINUOUS, name='', column=None) 

 lb 和 ub让变量在生成的时候就有下界和上届,

obj 确定了生成的变量在 目标函数的系数的取值

vtype 确定了变量取值的类型 (GRB.CONTINUOUS, GRB.BINARY, GRB.INTEGER, GRB.SEMICONT, or GRB.SEMIINT)

name 确定了这个参数的名字

column这个参数可以用来确定在已经存在的约束条件中这个变量的系数,但是由于在新版本中可以直接在生成约束条件(即调用addConstr)的时候就直接指定具体的约束条件,所以column参数并不经常使用,但是下面的代码还是给出这个参数的使用方法:

max 3x + 2y

   x + y <= 10

   2x + y <= 15

   x >= 0, y >= 0

m = gp.Model("example")
m.setParam('OutputFlag', 0) # 优化完成后不打印许可和/或计算服务器信息
# 添加约束
c1 = m.addConstr(0, GRB.LESS_EQUAL, 10, name="c1")
c2 = m.addConstr(0, GRB.LESS_EQUAL, 15, name="c2")# 使用column参数添加变量
x = m.addVar(lb=0, ub=GRB.INFINITY, obj=3, vtype=GRB.CONTINUOUS, name="x", column=gp.Column([1, 2], [c1, c2]))
y = m.addVar(lb=0, ub=GRB.INFINITY, obj=2, vtype=GRB.CONTINUOUS, name="y", column=gp.Column([1, 1], [c1, c2]))# 设置目标函数:最大化 3x + 2y,由于所有的决策变量和约束条件都以已经确定,
# 而且gurobi中是默认最大化目标函数,所以下面这句话可以选择不打
# m.setObjective(3 * x + 2 * y, GRB.MAXIMIZE)# 优化模型
m.optimize()if m.status == GRB.OPTIMAL:# 打印结果
else:# 无解

有了新版的设计,可以直接写成如下形式

m = gp.Model("example")
m.setParam('OutputFlag', 0)
x = m.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.CONTINUOUS, obj=3, name='x')
y = m.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.CONTINUOUS, obj=2, name='y')m.addConstr(x + y <= 10, name="c1")
m.addConstr(2 * x + y <= 15, name="c2")m.optimize()if m.Status == GRB.OPTIMAL:print(f'Optimal solution is {x.x}, {y.x}')print(f'Optimal value is {m.objVal}')
else:print("No solution!")

值得注意的是:

1. 调用addVar变量之后,返回值是与addVar中传入的参数不同的,比如 写下 x = m.addVar() 这句代码之后,这个变量名 x 是你在Python代码中用来操作和引用这个变量的标识符。

而调用y = model.addVar(vtype=GRB.INTEGER, obj=1.0, name="y"),其中name = "y"的参数就是在Gurobi模型内部使用,用于在模型的输出、日志文件或错误消息中标识该变量

2.调用 addVar接口,其返回值的类型是 gurobipy.Var,返回的这个变量可以直接和整数进行加减乘除运算,运算的结果可以作为目标函数或者约束条件,但是不能直接与浮点数进行非线性运算,如  x = m.addVar(); x ** 0.5; 但是可以使用其他方法实现非线性约束的效果,具体可以看我其他的博客

addVars

addVars ( *indices , lb=0.0 , ub=float('inf') , obj=0.0 , vtype=GRB.CONTINUOUS , name='' )

与addVar不同的是,addVars的第一个参数是一个参数包,对这个参数包,可以传入多种形式的参数,包括:

1. 数字序列: x = m.addVars(2, 3, 2),x 是一个包含 2 * 3 * 2 个键值对的 tupledict

2. 单个list: x = m.addVars( [1, 2, 3, 4] ),x 是以 1, 2, 3, 4 为key 的 tupledict

3. 多个list: x = m.addVars( [1, 2], ['a', 'b'] ),x 是以(1, 'a') 和 (2, 'b')为 key 的tupledict

4. tuplelist: x = m.addVars( [ (3, 'a'), (7, 'b') ] ),x 是分别以这两个元组为 key 的 tupledict

可以看到addVars在调用的过程中会生成很多变量,这些变量应该怎么配合lb, ub, obj, vtype, name 这些参数,实现不同的变量设置不同的属性?

使用列表即可,比如如下代码

z = m.addVars(3, obj=[1.0, 2.0, 1.2], name=["a", "b", "c"])

将会生成以0, 1, 2为key的三个键值对为tupledict对象的内容,其中z1的系数是1.0,在 gurobi 内部的名称是“a”, 以此类推,这样一下生成3个变量的同时,还可以规定这三个变量的系数和名称

addVar 和 addVars的返回值

addVar 的返回值类型是 <class 'gurobipy.Var'>

addVars 的返回值类型是 <class 'gurobipy.tupledict'>

所以想要使用这两种方法的返回值构建一个表达式,需要将 addVars 的返回值转成其他形式

可以使用 sum() 方法,代码示例如下

y = m.addVar(vtype=GRB.CONTINUOUS, name="y1")
z = m.addVars(3, obj=[1.0, 2.0, 1.2], name=["z1", "z2", "z3"])
m.update()
print(y + z.sum())

代码将打印 y1 + z1 + z2 + z3

添加变量到底是在干什么?

        我们知道,Gurobi 作为一个优化问题的求解器,构建模型的过程实际上就是在声明和定义变量,调用 addVar(s) 方法实际上就是将这些声明和定义后的变量进行暂存,

        暂存过程包括对变量的暂存和对约束条件的暂存,

在调用addVar(s) 和 addConstr系列方法之后

1. 变量会被暂存到模型的内部变量列表中。这些变量在暂存状态下不会被完全初始化,但Gurobi会记录它们的基本信息,如变量类型、上下界、目标函数系数等,

2. 约束条件会被暂存到模型的内部约束列表中。这些约束在暂存状态下不会被完全初始化,但Gurobi会记录它们的基本信息,如约束类型、左侧表达式、右侧常数等

然后这些变量 / 表达式将 处于暂存状态

暂存状态的可视化

添加变量,并直接打印这个变量

z = m.addVars(3, obj=[1.0, 2.0, 1.2])
print(z)

 打印结果

{0: <gurobi.Var *Awaiting Model Update*>, 1: <gurobi.Var *Awaiting Model Update*>, 2: <gurobi.Var *Awaiting Model Update*>}

暂存的意义

  • 性能优化

        Gurobi在内部进行了优化,避免在每次添加变量或约束时立即进行更新,因为这可能会导致不必要的性能开销。通过将这些操作暂存起来,Gurobi可以在适当的时候一次性进行更新,提高效率。

  • 批量处理

        在添加大量变量和约束时,批量更新可以显著提高性能。例如,当你在循环中添加大量变量和约束时,调用一次 model.update() 比每次添加一个变量或约束后都调用 model.update() 要高效得多。 

Gurobi 模型的 update() 方法

        Gurobi 会遍历这些暂存的变量和约束,将它们完全初始化并添加到模型的内部数据结构中,所谓的添加到内部数据结构,就是给变量 / 约束分配一个唯一的索引

在调用 update() 方法之后,这些变量 / 表达式将 处于完全初始化状态

完全初始化状态的可视化

添加变量,更新之后再打印这个变量

z = m.addVars(3, obj=[1.0, 2.0, 1.2], name=["z1", "z2", "z3"])
m.update()
print(z)

 打印结果

{0: <gurobi.Var z1>, 1: <gurobi.Var z2>, 2: <gurobi.Var z3>}

http://www.yayakq.cn/news/50925/

相关文章:

  • 济南网站制作策划万网空间存放两个网站
  • 做动画在线观看网站中国电子网
  • seo工作内容网站推广seo软件
  • 便利的合肥网站建设网站开发有几种语言
  • 杭州本地品牌网站建设收费河南郑州广告公司网站建设
  • 自己做淘宝客网站给个网站急急急2021
  • 购买网站域名空间中国建设银行巴黎分行网站
  • 如何安装织梦做的网站廊坊网站建设精灵
  • 思乐网站建设wordpress插件在哪个文件夹
  • wordpress添加图片海外广告优化师
  • 东莞专业网站建设价格淘宝网页版登录入口电脑版
  • 广州网站排名优化公司昌平知名的网站制作建设报价
  • 最好的设计师网站南充网站建设114
  • 做网站的联系方式长沙网站seo收费标准
  • 百度收录网站链接入口制作网站的基本步骤是
  • 商业网站导航怎么做前端素材网
  • 网站开发策划方案wordpress修改作者信息
  • dedecms 网站名称什么是友情链接?
  • 电子商务网站建设计划书企业app软件定制开发系统
  • 返回链接 网站惩罚检查 错误检查做网站 上海
  • 北京市基础建设质量监督局网站太原seo排名外包
  • 济南市工程建设技术监督局网站免费托管wordpress
  • 如何接做网站编程的生意电子商务平台经营者接到通知后
  • 制作一个网站多少钱成都软件外包开发
  • dede5.7 做的网站 下 加一个discuz论坛四川建筑信息数据共享平台
  • 制作网站电话网站推广策划书范文
  • 民治制作网站icp是什么
  • dw个人网站主页怎么做免费做简历的软件网站
  • 沧州地区阿里巴巴做网站开通网站流程
  • 网站备案没有了12306网站多少钱做的