马尔科夫人决策过程代码实现-鸳鸯系统

本文详细介绍了如何使用强化学习中的马尔科夫决策过程(MDP)来解决鸳鸯系统中的决策问题。通过数学模型建立状态转移矩阵,并通过迭代求解最优策略,实现智能决策。内容涵盖了MDP的基本概念、算法实现以及在实际系统中的应用案例。
摘要由CSDN通过智能技术生成
main.py

import pygame
import numpy as np
from load import *
import random
class YuanYangEnv:
    def __init__(self):
        self.states = []# 状态
        for i in range(0,100):
            self.states.append(i)
        self.actions = ['e', 's', 'w', 'n']# 离散的状态
        self.gamma = 0.8 # 衰减因子
        self.value = np.zeros((10, 10))# 值函数
        # 渲染属性
        self.viewer = None# 窗口
        self.FPSCLOCK = pygame.time.Clock()
        # print(self.FPSCLOCK)
        # 屏幕大小
        self.screen_size = (1200, 900)
        self.bird_position = (0, 0)
        # 一个方格的大小
        self.limit_distance_x = 120
        self.limit_distance_y = 90
        self.obstacle_size = [120, 90]
        self.obstacle1_x = []
        self.obstacle1_y = []
        self.obstacle2_x = []
        self.obstacle2_y = []
        self.path = []

        for i in range(8):
            # 第一个障碍物
            self.obstacle1_x.append(360)
            if i <= 3:
                self.obstacle1_y.append(90 * i)
            else:
                self.obstacle1_y.append(90 * (i + 2))
            # 第二个障碍物
            self.obstacle2_x.append(720)
            if i <= 4:
                self.obstacle2_y.append(90 * i)
            else:
                self.obstacle2_y.append(90 * (i + 2))

        self.bird_male_init_position = [0, 0]
        self.bird_male_position = [0, 0]
        self.bird_female_init_position = [1080, 0]
    def render(self):
        if self.viewer is None:
            pygame.init()
            # 画一个窗口
            self.viewer = pygame.display.set_mode(self.screen_size, 0, 32)
            pygame.display.set_caption("yuanyang")
            # 下载图片
            self.bird_male = load_bird_male()
            self.bird_female = load_bird_female()
            self.background = load_background()
            self.obstacle = load_obstacle()
            # self.viewer.blit(self.bird_male, self.bird_male_init_position)
            # 在幕布上画图片
            self.viewer.blit(self.bird_female, self.bird_female_init_position)
            self.viewer.blit(self.background, (0, 0))
            self.font = pygame.font.SysFont("times", 35)
        self.viewer.blit(self.background, (0, 0))
        # 画直线
        for i in range(11):
            pygame.draw.lines(self.viewer, (255, 255, 255), True, ((120 * i, 0), (120 * i, 900)))
            pygame.draw.lines(self.viewer, (255, 255, 255), True, ((0, 90 * i), (1200, 90 * i)), 1)
        # 雌鸟
        self.viewer.blit(self.bird_female, self.bird_female_init_position)
        # 画障碍物
        for i in range(8):
            self.viewer.blit(self.obstacle, (self.obstacle1_x[i], self.obstacle1_y[i]))
            self.viewer.blit(self.obstacle, (self.obstacle2_x[i], self.obstacle2_y[i]))
        # 画小鸟
        self.viewer.blit(self.bird_male, self.bird_male_position)
        # 画值函数
        for i in range(10):
            for j in range(10):
               surface = self.font.render(str(round(float(self.value[i, j]), 3)), True, (0, 0, 0))
               self.viewer.blit(surface, (120 * i + 35, 90 * j + 35))
        # 画路径点
        for i in range(len(self.path)):
            rec_position = self.state_to_position(self.path[i])
            pygame.draw.rect(self.viewer, [255, 0, 0], [rec_position[0], rec_position[1], 120, 90], 3)
            surface = self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值