rewards.py

这段代码实现了一个用于 GreenLight 温室环境 的奖励模块,定义了多种奖励计算方式,用于强化学习(RL)算法的训练和优化。奖励模块的核心功能是根据温室的状态(如温度、湿度、CO2 浓度等)和控制输入(如加热、通风、CO2 供应等)计算奖励值。以下是代码的详细解释:


1. 代码结构

代码主要由以下几个类组成:

  1. BaseReward:

    • 这是奖励模块的基类,定义了奖励计算的基本接口。

    • 包含奖励值的上下界(rminrmax)以及奖励值的缩放方法(_scale)。

  2. HarvestHeatCO2Reward:

    • 继承自 BaseReward,用于计算基于利润的奖励。

    • 奖励值由番茄的销售收入减去加热和 CO2 供应的成本组成。

  3. ArcTanPenaltyReward:

    • 继承自 BaseReward,用于计算基于惩罚的奖励。

    • 惩罚值由温室状态变量(如温度、湿度、CO2 浓度)与设定边界的偏差计算得出,并使用反正切函数进行平滑处理。

  4. AdditiveReward:

    • 继承自 BaseReward,用于将多个奖励模块的奖励值相加。

    • 支持将利润奖励和惩罚奖励组合成一个总奖励。

  5. MultiplicativeReward:

    • 继承自 BaseReward,用于将多个奖励模块的奖励值相乘。

    • 支持将利润奖励和惩罚奖励组合成一个总奖励。


2. 核心功能

2.1 利润奖励

  • HarvestHeatCO2Reward._compute_reward:

    • 计算番茄的销售收入、加热成本和 CO2 供应成本。

    • 奖励值为销售收入减去加热和 CO2 供应的成本。

2.2 惩罚奖励

  • ArcTanPenaltyReward._compute_penalty:

    • 计算温室状态变量(如温度、湿度、CO2 浓度)与设定边界的偏差。

    • 使用反正切函数对偏差进行平滑处理,确保惩罚值在合理范围内。

2.3 奖励组合

  • AdditiveReward._compute_reward:

    • 将多个奖励模块的奖励值相加,得到一个总奖励。

    • 例如:总奖励 = 利润奖励 + 惩罚奖励。

  • MultiplicativeReward._compute_reward:

    • 将多个奖励模块的奖励值相乘,得到一个总奖励。

    • 例如:总奖励 = 利润奖励 * (1 – 惩罚奖励)。


3. 代码的应用场景

  • 强化学习训练:

    • 用于定义强化学习算法的奖励函数。

    • 通过优化奖励函数,训练 RL 算法控制温室环境,最大化作物产量并最小化资源成本。

  • 温室控制策略优化:

    • 用于评估不同控制策略的性能。

    • 通过奖励值比较不同策略的经济效益和温室状态稳定性。

  • 调试和验证:

    • 用于验证奖励计算的正确性和合理性。


4. 关键参数

4.1 利润奖励参数

  • 价格参数:

    • co2_price: CO2 价格(€/kg)。

    • gas_price: 天然气价格(€/m³)。

    • tom_price: 番茄价格(€/kg)。

  • 作物参数:

    • dmfm: 果实的干物质比例(kg [DM] / kg [FW])。

  • 模型参数:

    • max_co2_rate: 最大 CO2 供应速率(kg/m²/h)。

    • max_heat_cap: 最大加热容量(J/m²)。

    • max_harvest: 最大收获量(kg/m²)。

    • energy_content_gas: 天然气的能量含量(J/m³)。

4.2 惩罚奖励参数

  • 惩罚权重:

    • k: 惩罚权重列表,用于调整不同状态变量的惩罚强度。

  • 状态边界:

    • obs_low: 状态变量的下界。

    • obs_high: 状态变量的上界。

4.3 奖励组合参数

  • 奖励模块列表:

    • rewards_list: 需要组合的奖励模块列表(如 HarvestHeatCO2RewardArcTanPenaltyReward)。

  • 惩罚权重:

    • omega: 惩罚奖励的权重,用于调整惩罚对总奖励的影响。


5. 示例

初始化奖励模块

python
复制
# 利润奖励模块
profit_reward = HarvestHeatCO2Reward(
    co2_price=0.1,
    gas_price=0.26,
    tom_price=1.6,
    dmfm=0.1,
    time_interval=3600,
    max_co2_rate=0.1,
    max_heat_cap=1e6,
    max_harvest=10,
    energy_content_gas=36e6
)

# 惩罚奖励模块
penalty_reward = ArcTanPenaltyReward(
    k=[1, 1, 1],
    obs_low=[20, 400, 60],
    obs_high=[30, 800, 80]
)

# 组合奖励模块
additive_reward = AdditiveReward([profit_reward, penalty_reward])
multiplicative_reward = MultiplicativeReward([profit_reward, penalty_reward], omega=0.5)

计算奖励值

python
复制
# 假设 GLModel 是 GreenLight 模型实例
reward = additive_reward._compute_reward(GLModel)

6. 总结

这段代码实现了一个灵活的奖励模块,支持利润奖励、惩罚奖励以及奖励的组合计算。通过模块化的设计,可以轻松扩展和定制奖励函数的内容和范围,适用于强化学习训练和温室控制策略的优化。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇