第一次理解了使用gurobi线性优化的过程

使用gurobi求解算法问题,第一次理解到位
摘要由CSDN通过智能技术生成

题目

人体需要四种营养:category: calories、protein、fat、sodium。食物来源:foods=hamburger, chicken, hot dog, fries, macaroni, pizza, salad, milk, ice cream

         营养吸收每天都有上限和下限;单位重量食物价格不同;单位重量食物所含营养成分不同,求达到足够营养花费的代价最小。

思路:

这个是典型的最优化,主要难点在于建模,怎么把需求转化为表达式,然后让gurobi求解。

本质就是, 用最小的成本来满足人体每日的营养需求。

核心逻辑就是以下几行:

第一行: 添加变量, 使用addVars, 相当于为foods里的每一种食物创建一个变量。

第二行:设定目标, 每一种food需求量 和其成本 cost相乘,就是此种food的成本, 把这些food全部加起来就是总成本, 求其最小值。

第三行:每种营养都有最大值和最小值, 所以,约束条件1就是 把所有食物中此中营养加起来大于等于最小值。   某种营养的总和 = sum(每个食物购买量buy[f] 乘以 该种食物营养含量 nutritionValues[f, c] )。

第四行:与第三行一样的道理。

buy = m.addVars(foods, name= "buy_food")

m.setObjective(quicksum([buy[f] * cost[f] for f in foods] ), GRB.MINIMIZE)

m.addConstrs( quicksum([nutritio
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gurobi是一种常用的数学规划和优化求解器,可以用于解决各种双层优化问题。 双层优化是一种特殊类型的优化问题,其中存在两个相互依赖的优化问题。通常,第一个优化问题称为上层问题,决策者试图在给定一组限制条件的情况下最大化或最小化某个目标函数。而第二个优化问题称为下层问题,其决策变量受到上层问题的变量值的影响。 使用Gurobi求解双层优化问题时,可以通过建立数学模型来表示问题。第一步是定义上层问题的目标函数和约束条件。然后,将上层问题的变量值传递给下层问题,并定义下层问题的目标函数和约束条件。最后,可以使用Gurobi进行求解,得到上层问题的最优解以及对应的下层问题的最优解。 Gurobi提供了强大的优化算法和求解技术,可以高效地求解双层优化问题。它支持数学规划(线性规划、整数规划、混合整数规划等)和约束编程等不同类型的优化模型。同时,它还提供了丰富的接口和工具,可以与各种编程语言(如Python、Java等)和软件(如MATLAB)进行集成使用。 通过使用Gurobi求解双层优化问题,决策者可以得到最优的上层决策和下层决策,从而在给定的约束条件下实现最佳的综合目标。这种能力使得Gurobi在许多领域(如供应链管理、能源系统优化等)的决策问题中得到广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值