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
马尔科夫人决策过程代码实现-鸳鸯系统
最新推荐文章于 2024-08-15 13:20:27 发布
本文详细介绍了如何使用强化学习中的马尔科夫决策过程(MDP)来解决鸳鸯系统中的决策问题。通过数学模型建立状态转移矩阵,并通过迭代求解最优策略,实现智能决策。内容涵盖了MDP的基本概念、算法实现以及在实际系统中的应用案例。
摘要由CSDN通过智能技术生成