You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GAMS中如何编写含时间求和的最大化目标函数代码

GAMS目标函数编写方案

针对你提出的0到2020年时序求和的最大化目标,按GAMS语法规则分模块编写即可,完整实现逻辑如下:

  • 定义时间索引集合
    首先声明覆盖0-2020范围的时间集合,作为时序求和的索引基础:
Set t 时间周期 /0*2020/;
  • 定义常量与时变参数
    pusage、busage为固定常量,用标量类型声明;Vusage(t)为随t递增的时变参数,可根据你实际的递增规则赋值:
* 声明常量,括号内替换为实际取值
Scalar pusage  usage对应单价参数 /填入实际数值/
       busage  usage对应折减系数 /填入实际数值/;

* 声明时变参数Vusage(t)
Parameter Vusage(t) 随时间递增的usage规模;

* 以下为Vusage赋值示例,可替换为你实际使用的递增函数
* 示例1:线性递增,t=0时初始值为V0,每年固定增量delta
Scalar V0 初始规模 /填入实际初始值/ delta 年固定增量 /填入实际增量/;
Vusage(t) = V0 + delta*t.val;

* 示例2:指数递增,年增长率为growth_rate
* Scalar growth_rate 年增长率 /填入实际增长率/;
* Vusage(t) = V0*(1+growth_rate)**t.val;
  • 定义目标变量与方程
    GAMS需要先声明变量、方程,再编写方程对应的代数关系,注意给1-busage加括号避免运算优先级错误:
* 声明目标变量,存储最大化的总目标值
Variable z 总目标值;

* 声明目标方程
Equation obj 目标函数方程;

* 编写目标方程的具体逻辑
obj.. z =e= sum(t, Vusage(t)*pusage*(1-busage));
  • 模型配置与求解
    将方程纳入模型后,指定求解方向为最大化即可:
* 构建包含所有已声明方程的模型
Model calc_model /all/;
* 调用求解器,以最大化z为目标求解
Solve calc_model using lp maximizing z;

注意事项:

  1. 代码中所有占位的参数值需要替换为你模型实际使用的数值,Vusage的赋值规则可根据你实际的时变函数灵活调整,不影响目标函数本身的写法
  2. 原公式中1-busage必须加括号,否则GAMS会按运算优先级先计算Vusage(t)*pusage*1再减去busage,和你预期的计算逻辑不一致
  3. 如果模型包含其他约束,正常声明方程、编写约束关系后纳入模型即可,不会和该目标函数冲突

内容的提问来源于stack exchange,提问作者Koussay Abdouli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:31:00