PyBrain দিয়ে Game Environment এ RL মডেল তৈরি

Reinforcement Learning এর বাস্তব উদাহরণ - পাইব্রেইন (PyBrain) - Machine Learning

298

Reinforcement Learning (RL) হল মেশিন লার্নিংয়ের একটি শাখা, যেখানে একটি এজেন্ট তার পরিবেশের সাথে ইন্টারঅ্যাক্ট করে এবং কিছু কর্মের মাধ্যমে পুরস্কার বা শাস্তি পেয়ে শিখে। PyBrain দিয়ে একটি Game Environment তৈরি করে RL মডেল তৈরি করা সম্ভব, যেখানে একটি এজেন্ট বিভিন্ন কর্ম নিয়ে পরিবেশের সাথে যোগাযোগ করে এবং সর্বোচ্চ পুরস্কার অর্জনের চেষ্টা করে।

এখানে আমরা একটি সাধারণ গেম পরিবেশে Q-Learning অ্যালগরিদম ব্যবহার করে RL মডেল তৈরি করার প্রক্রিয়া দেখবো। PyBrain তে একটি সাধারণ RL এজেন্ট তৈরি করা হবে যা GridWorld পরিবেশে কাজ করবে।


১. Game Environment তৈরি করা

GridWorld পরিবেশটি একটি সহজ গেম পরিবেশ, যেখানে একটি এজেন্ট একটি গ্রিডে চলাফেরা করে এবং তাকে একটি লক্ষ্য পয়েন্টে পৌঁছাতে হয়। গেমটির উদ্দেশ্য হলো, এজেন্টের জন্য সর্বোচ্চ পুরস্কার অর্জন করা।

১.১ GridWorld Environment

GridWorld একটি ৫x৫ সেল গ্রিড হতে পারে, যেখানে এজেন্ট শুরুতে একটি সেলে অবস্থান নেবে এবং একটি গন্তব্য সেল (goal state) এ পৌঁছাতে চেষ্টা করবে।

import numpy as np

class GridWorld:
    def __init__(self, size=5):
        self.size = size
        self.grid = np.zeros((size, size))
        self.agent_pos = (0, 0)  # এজেন্টের শুরু অবস্থান
        self.goal_pos = (size-1, size-1)  # লক্ষ্য অবস্থান

    def reset(self):
        self.agent_pos = (0, 0)
        return self.agent_pos

    def step(self, action):
        x, y = self.agent_pos

        # 4টি সম্ভাব্য কর্ম: উপরে, নিচে, বামে, ডানে
        if action == 0:  # উপরে
            x = max(0, x-1)
        elif action == 1:  # নিচে
            x = min(self.size-1, x+1)
        elif action == 2:  # বামে
            y = max(0, y-1)
        elif action == 3:  # ডানে
            y = min(self.size-1, y+1)

        self.agent_pos = (x, y)

        # পুরস্কার নির্ধারণ
        if self.agent_pos == self.goal_pos:
            return self.agent_pos, 1, True  # গন্তব্যে পৌঁছানো, পুরস্কার ১
        return self.agent_pos, -0.1, False  # সেল পরিবর্তন, কিছু পুরস্কার কমে (negative reward)

    def render(self):
        grid = np.full((self.size, self.size), " ")
        grid[self.goal_pos] = "G"
        grid[self.agent_pos] = "A"
        for row in grid:
            print(" ".join(row))
        print()

এখানে:

  • size হল গ্রিডের আকার (ডিফল্টভাবে ৫x৫ গ্রিড)।
  • step(action) ফাংশনটি এজেন্টকে একটি কর্ম গ্রহণ করে পরবর্তী অবস্থায় নিয়ে যায় এবং পুরস্কার প্রদান করে।
  • render() ফাংশনটি গ্রিডটি কনসোলে প্রদর্শন করে, যেখানে এজেন্ট এবং লক্ষ্য সেল (G) এর অবস্থান দেখানো হয়।

১.২ Game Environment এর উদাহরণ

GridWorld এ একটি গেম পরিবেশ তৈরি হয়েছে, যেখানে এজেন্ট A এবং গন্তব্য G প্রদর্শিত হবে।

env = GridWorld()
env.reset()
env.render()

# কিছু পদক্ষেপ নেওয়া
env.step(1)
env.render()
env.step(3)
env.render()

২. Q-Learning ব্যবহার করা

এখন, আমরা Q-Learning ব্যবহার করে এজেন্টকে শিখতে সহায়তা করব। Q-Table তৈরি করা হবে যা প্রতি সেল এবং কর্মের জন্য Q-value সঞ্চয় করবে, এবং এজেন্ট তার পুরস্কার অর্জনের জন্য সেরা কর্ম নির্বাচন করবে।

২.১ Q-Learning অ্যালগরিদম

Q-Learning অ্যালগরিদমের মাধ্যমে, আমরা মডেলটি ট্রেন করব এবং Q-values আপডেট করব।

import random
import numpy as np

# Q-Table তৈরি করা (গ্রিডের আকার অনুযায়ী)
action_space = 4  # উপরে, নিচে, বামে, ডানে
state_space = 25  # ৫x৫ গ্রিডের ২৫টি অবস্থা
Q_table = np.zeros((state_space, action_space))

# Hyperparameters
learning_rate = 0.8
discount_factor = 0.95
epsilon = 0.1  # Explore-exploit tradeoff
epochs = 1000

# Q-learning প্রক্রিয়া
for epoch in range(epochs):
    state = env.reset()  # নতুন গেম পরিবেশে শুরু করা
    done = False
    
    while not done:
        state_idx = state[0] * 5 + state[1]  # অবস্থা ইনডেক্সে রূপান্তর
        if random.uniform(0, 1) < epsilon:  # Exploration
            action = random.choice([0, 1, 2, 3])  # র্যান্ডম কর্ম নির্বাচন
        else:  # Exploitation
            action = np.argmax(Q_table[state_idx])  # সর্বোত্তম কর্ম নির্বাচন

        next_state, reward, done = env.step(action)  # কর্মের ফলে পরবর্তী অবস্থান
        next_state_idx = next_state[0] * 5 + next_state[1]  # পরবর্তী অবস্থা ইনডেক্সে রূপান্তর

        # Q-value আপডেট করা
        Q_table[state_idx, action] = Q_table[state_idx, action] + learning_rate * (
            reward + discount_factor * np.max(Q_table[next_state_idx]) - Q_table[state_idx, action]
        )
        
        state = next_state  # পরবর্তী অবস্থায় স্থানান্তর

print("Training Complete")

এখানে:

  • Q_table হল ২৫টি অবস্থার জন্য ৪টি কর্মের Q-values ধারণকারী একটি টেবিল।
  • epsilon-greedy কৌশলটি exploration এবং exploitation এর মধ্যে ভারসাম্য রাখতে ব্যবহৃত হয়।
  • Q-value আপডেট ফর্মুলা: Q(s,a)=Q(s,a)+α[R(s,a,s)+γmaxaQ(s,a)Q(s,a)]Q(s, a) = Q(s, a) + \alpha \left[ R(s, a, s') + \gamma \max_{a'} Q(s', a') - Q(s, a) \right]

৩. Q-Learning মডেল টেস্ট করা

এখন, আমরা ট্রেনিংয়ের পরে এজেন্টকে টেস্ট করে দেখতে পারি যে সে তার শিখে নেয়া নীতির ভিত্তিতে সেরা কর্ম গ্রহণ করছে কিনা।

# টেস্টিং ফase
state = env.reset()
done = False

while not done:
    state_idx = state[0] * 5 + state[1]
    action = np.argmax(Q_table[state_idx])  # সেরা কর্ম নির্বাচন
    next_state, reward, done = env.step(action)
    env.render()  # পরিবেশের বর্তমান অবস্থা দেখানো
    state = next_state

এখানে, আমরা মডেলকে Q-table থেকে সর্বোত্তম কর্ম নির্বাচন করতে দিচ্ছি এবং পরিবেশে সেই কর্ম প্রয়োগ করছি। আমরা render() ফাংশন দিয়ে পরিবেশের বর্তমান অবস্থা দেখতে পারি।


সারাংশ

  • Markov Decision Process (MDP) ব্যবহার করে GridWorld মতো গেম পরিবেশে Reinforcement Learning (RL) মডেল তৈরি করা সম্ভব।
  • Q-Learning অ্যালগরিদম ব্যবহার করে আমরা এজেন্টকে শিখতে সাহায্য করি যাতে সে সর্বোচ্চ পুরস্কার অর্জন করতে পারে।
  • Q-table এজেন্টের জন্য বিভিন্ন অবস্থার সাথে সম্পর্কিত কর্মের মূল্য ধারণ করে, এবং প্রতি ইপোকসে তা আপডেট হয়।
  • PyBrain এর মাধ্যমে Game Environment এ RL মডেল তৈরি করে, আমরা সেরা কর্ম নির্বাচন করতে পারি এবং সর্বোচ্চ পুরস্কার অর্জনের জন্য এজেন্টকে ট্রেন করতে পারি।
Content added By
Promotion

Are you sure to start over?

Loading...