Kontrol Self Balancing Inverted Pendulum Pada Robot Roda Dua Lengan dengan Deep Reinforcement Learning.

Referensi: Mellatshahi, Navid et al. 2021. Inverted Pendulum Control with a Robotic Arm

using Deep Reinforcement Learning. International Symposium on Signal, Ciruits and System (ISSCS).

ISSCS: University of Windsor, ISBN: 978-1-6654-4942-7





Abstrak [kembali]

Mengaktifkan sistem robot untuk tindakan otonom seperti sistem tanpa pengemudi, adalah tugas yang sangat kompleks dalam skenario dunia nyata karena ketidakpastian. Pembelajaran mesin kemampuan telah dengan cepat membuat jalan mereka ke sistem otonom dan  teknologi robotika industri. Mereka menemukan banyak aplikasi di setiap sektor, termasuk kendaraan otonom, robot humanoid, drone, dan banyak lagi. Dalam penelitian ini kami akan mengimplementasikan kecerdasan buatan pada lengan robotik mampu memecahkan masalah kontrol keseimbangan yang kompleks dari awal, tanpa ada umpan balik dan menggunakan algoritma pembelajaran penguatan mendalam yang canggih bernama DQN.

Masalah patokan yang dianggap sebagai studi kasus, adalah keseimbangan terbalik pendulum ke atas menggunakan robot beroda dua. Bentuk yang sangat sederhana ini masalah telah dipecahkan baru-baru ini menggunakan pembelajaran mesin namun di bawah tesis ini  kami membuat sistem pendulum terbalik yang sangat kompleks dan diimplementasikan di Robot Sistem Operasi (ROS) yang merupakan lingkungan simulasi yang sangat realistis.

Kami tidak hanya berhasil mengendalikan pendulum tetapi juga menambahkan turbulensi model yang dipelajari untuk mempelajari ketahanannya. Kami mengamati bagaimana model pembelajaran awal tidak stabil dengan adanya turbulensi dan bagaimana turbulensi acak membantu sistem untuk mengubah ke model yang lebih kuat. Kami juga telah menggunakan model yang kuat di lingkungan yang berbeda dan menunjukkan bagaimana model mengadopsi dirinya dengan fisik baru properti. Menggunakan sensor orientasi pada ujung pendulum terbalik untuk mendapatkan kecepatan sudut, simulasi di ROS dan pendulum terbalik pada ball joint sedikit disorot hal baru dalam tesis ini dibandingkan publikasi sebelumnya.



Pendahuluan [kembali]

Kendali pendulum terbalik merupakan salah satu tolak ukur permasalahan kendali yang digunakan oleh para peneliti untuk menguji strategi kontrol baru selama 50 tahun terakhir. Ini memiliki struktur sederhana tetapi kaya model untuk menguji strategi pengendalian. Memecahkan jenis masalah ini dengan pembelajaran mesin adalah pendekatan yang menjanjikan karena tidak memerlukan model sistem yang dinamis melainkan algoritma pembelajaran mesin dapat menghasilkan tindakan otonom berdasarkan pengalaman.

Studi kasus yang dimaksud dalam tesis ini adalah menyeimbangkan pendulum terbalik pada ball joint menggunakan lengan robot dan teknik pembelajaran mesin alih-alih loop kontrol normal seperti PID. Pendulum terbalik dapat bebas jatuh ke segala arah karena terhubung ke end-effector menggunakan ball joint. Kami menggunakan Inertial Measurement Unit (IMU) untuk mendapatkan sudut kecepatan dan orientasi pendulum untuk menggunakan data ini dalam algoritma pembelajaran.

Kendali pendulum terbalik merupakan salah satu tolak ukur permasalahan kendali yang digunakan oleh para peneliti untuk menguji strategi kontrol baru selama 50 tahun terakhir. Ini memiliki struktur sederhana tetapi kaya model untuk menguji strategi pengendalian. Ada banyak aplikasi robot juga berdasarkan pendulum terbalik dalam hal prinsip stabilisasi mereka. [1] Misalnya:

• Kontrol sistem robot yang kurang digerakkan

• Desain pendulum terbalik bergerak

• Perencanaan kiprah robot humanoid

Kontrol robot humanoid adalah tugas yang menantang karena memiliki kendala dinamis dan ketakpastian. Pembuatan pola kiprah adalah masalah utama dan untuk menyederhanakan lintasan generasi banyak penelitian menggunakan analogi antara kiprah bipedal dan pendulum terbalik gerak[1]. Desain dan implementasi pendulum beroda bergerak muncul dalam produk komersial juga, Segway dan skuter self-balancing adalah dua contoh produk komersial itu menggunakan pendekatan pengontrol pendulum terbalik.

 


Mengaktifkan sistem robot untuk melakukan tugas secara mandiri adalah tugas yang sangat kompleks di dunia nyata skenario karena ketidakpastian. Ketidakpastian tidak dapat diprogram oleh IF & THEN, jadi semacam kecerdasan buatan umum yang diperlukan sistem ini untuk memungkinkannya dibuat keputusan seperti manusia.



Metodologi Penelitian[kembali]

Pendekatan kami untuk memecahkan masalah yang diusulkan adalah menggunakan pembelajaran penguatan keadaan seni algoritma di lingkungan Robot Operating System (ROS). Kami akan menggunakan pembelajaran penguatan (RL) untuk mengatasi tantangan pengumpulan data, karena pembelajaran penguatan tidak membutuhkan data apa pun untuk memecahkan masalah, melainkan itu belajar dengan teknik hadiah dan hukuman. Ada banyak pembelajaran penguatan algoritma, tetapi kami akan menggunakan Deep Quality Network (DQN) yang baru-baru ini menarik banyak aplikasi dan muncul dalam penelitian terbaru untuk berbagai jenis aplikasi di mana jenis keputusan manusia diperlukan. Kami akan menggunakan ROS dalam kombinasi dengan simulasi Gazebo yang sangat realistis lingkungan dan sangat digunakan dalam masalah komersial dan penelitian. Menggunakan realistis

lingkungan membantu pada waktu perhitungan dan mengatasi tantangan keselamatan. Keamanan adalah kuncinya masalah dalam pembelajaran penguatan karena agen atau robot tidak memiliki pemahaman apapun lingkungannya di awal dan perlu mengeksplorasi dan menemukan tindakan yang tepat di kanan situasi dari waktu ke waktu. Jadi, itu mungkin merusak atau melakukan tindakan yang sangat tidak aman selama proses pembelajaran.Kami juga akan membuat model pembelajaran menjadi sangat kuat dengan menerapkan gaya secara acak selama

proses pelatihan. Jadi, model yang kokoh dapat digunakan dalam robot nyata dan mengadopsi dirinya dengan model dinamis baru. Solusi yang kami usulkan mengatasi semua tantangan yang disebutkan dalam tabel 1.1 untuk masalah khusus ini.

Kami akan menggunakan sensor di bagian atas pendulum terbalik untuk merasakan kecepatan sudut dan orientasi pendulum terbalik, data ini digunakan sebagai masukan untuk algoritma pembelajaran. Kami menggunakan teknik fusi sensor untuk membuat sensor ini dan dijelaskan secara rinci tentang perangkat keras.

Machine Learning (ML) telah menarik lebih banyak perhatian saat ini dan banyak ditemukan aplikasi di setiap sektor industri, mulai dari pengenalan pola data besar hingga otomatisasi dan hiburan. Ini memainkan peran penting dalam bidang medis seperti jantung, hati, dan kanker sistem deteksi dini. ML telah membuka jalan untuk membiayai dan bisnis juga dan memungkinkan pendekatan berbasis data yang lebih baik, dari prediksi saham hingga keuangan. Pembelajaran mesin algoritma semakin ditingkatkan dan dikembangkan, metode dan algoritma baru muncul setiap hari.

Teknologi ML memungkinkan pergeseran paradigma dalam pemecahan masalah dari analitis menjadi kuat pendekatan berbasis data. Unit pemrosesan berkecepatan tinggi, ketersediaan data besar dan data berlabel,memungkinkan program komputer mempelajari model dari data pelatihan dan memprediksi hasil dari yang baru Kategori utama pembelajaran mesin adalah:

• Pembelajaran yang diawasi

• Pembelajaran tanpa pengawasan

• Pembelajaran yang diperkuat



ALGORITMA[kembali]

Algoritma Deep Reinforcement Learning

 

1. Reinforcement learning

Reinforcement Learning adalah kelas model machine Learning dimana proses pembelajaran didasarkan pada umpan balik evaluatif tanpa ada siyal yang diawasi. Reinforcement learning tidak memerlukan data sebelumnya dan bisa secara mandiri mendapakan kebijakan opsional dengan pengetahuan yang  diperoleh dengan trial-and kesalaha dan terus berinteraksi dengan lingkungan yang dinamis. Kerangka matematis untuk menentukan solusi dala skenario pembelajaran penguatan adalah disebut Proses Keputusan Markov. Ini dapat dirancang sebagai :

A.  S: Set of State

B.  A: Set of Action

C.  R: Reward functiom

D. Π:Policy

E.  V: Value

 

Agen mengambil tindakan (A) untuk transisi dari status awal ke status akhir (S) dan masuk kembali, mendapat hadiah (R) untuk setiap tindakan, tindakan mengarah pada hadiah positif atau negatif penghargaan. Serangkaian tindakan yang diambil Agen, tentukan (π)dan imbalan yang didapatnya kembali, mendefenisikan niai V. Tugas disini adalah memaksimalkan imbalan dengan memilih kebijakan yang tepat. Jadi, kita harus memaksimalkan semua kemunngkinan nilai S untuk waktu t yang dapat dilihat pada pesemaan 2.!, dimana (π)adalah kebikjakan, r adalah reward dan S adalah state dan E adalah fungsi yang harus dimaksimalkan.

 

E = ( rt / π.S)



 

2. Q Learning

Q-learning adalah algoritme pembelajaran penguatan di luar kebijakan dan bebas model. di luar kebijakan metode mengevaluasi atau meningkatkan kebijakan yang berbeda dari yang digunakan untuk menghasilkan data, di Kontras Metode on-policy mencoba untuk mengevaluasi atau memperbaiki kebijakan yang digunakan untuk membuat keputusan. Dalam model algoritma tipe bebas RL tidak membuat asumsi model dinamis lingkungan.

‘Q’ dalam Q-Learning berarti kualitas. Kualitas dalam hal ini mempresentasikan seberapa berguna suatu pemberian tindakan adalah untuk mendapatkan beberapa hadiah di masa depan. Dalam Q-Learning kita membuat Q-table yang representatif nilai kualitas dari setiap keadaan. Untuk menjelaskan secara singkat cara kerja Q-Learning, Izinkan asumsikan robot harus melewati labiirin dan mencapai titik akhir tetapi ada beberapa rajau dan tingkatkan poin di area tersebut.



Table-Q terdiri dari empat tinndakan dalam 4 kolom dan 5 status dalam 5 baris. Daalam contoh ini. Tabel ini pertama kali diinisialisasi dengan nilai 0 tetapi kemudian menggunkan Persamaan Bellman.

V(s) = max ( R((s,a) + yV (s’)

Keterangan :

S = a particular state

a = action

S’= state to which the robot goes from s

Y= discount factor

R((s,a) = a reward function which takes a state s and action a and outputs a reward value

V (s) = value of being in a particular state

 

Persmaan Bellman dalam bentuk sederhana mengatakan nilai Q saat ini sebagian besar terkait dengan imbalan langsung ditambah sebagian dari imbalan masa depaa. Algoritma keseluruhan untul Q-learning bisa dilihat pada gambar.



3. Deep Q learning

Setelah makalah DeepMind diterbitkan pada 2015 “Kontrol tingkat manusia melalui kedalaman pembelajaran penguatan , Kombinasi jaringan saraf tiruan dengan pembelajaran penguatan membuka cakrawala baru untuk robot otonom. Gambar dibawah menunjukan perbedaan antara Q Learning dan Deep Q Learning secara sederhana masalah, nilai Q diperkirakan untuk setiap tindakan dengan Neural Network dan memperkirakan nilai Q. Dengan pendekatan ini kita menimilkan jumlah kebutuhan memori. Namun, pendekatan ini memaksakan beberapa yang lain masalah juga.





 

Untuk menerapkan pembelajaran penguatan dalam sistem pendulum terbalik yang paling kompleks, kami telah membagi studi kasus menjadi 3 bagian. Kita mulai dengan kebebasan satu derajat pendulum terbalik yang terutama digunakan dalam makalah yang diterbitkan baru-baru ini, fase ini memungkinkan kita untuk melakukannya periksa dan bandingkan hasil kami dengan yang dipublikasikan, temukan kesalahan kami dan selesaikan semuanya tantangan untuk langkah selanjutnya.

Kemudian kita mengambil langkah lebih jauh dan membuat pendulum terbalik 3 derajat kebebasan di mana pendulum terbalik dapat jatuh bebas ke segala arah. Untuk mengontrol sistem ini, kami menempatkannya pada beberapa orang sasis yang dapat bergerak bebas ke segala arah. Kami mencoba mengembangkan seluruh program di sedemikian rupa sehingga memperluas proyek dari satu fase ke fase lainnya tidak memerlukan re menyusun keseluruhan program. Kami menggunakan kelas yang ditulis dalam bahasa Python, perpustakaan dan file konfigurasi untuk memungkinkan kami dengan cepat mengubah satu program ke program lainnya.

Pendulum terbalik satu derajat garis lurus lurus terdiri dari gerobak atau a kotak yang bergerak hanya dalam satu sumbu dan tiang yang digantung di tengahnya dan di mana berayun bebas pada sumbu yang sama dengan gerobak atau kotak bergerak. Seperti yang terlihat pada gambar 10 gaya F adalah diperlukan untuk menggerakkan gerobak ke kiri dan ke kanan dan berdasarkan percepatan, kecepatan, dan kecepatannya posisi pendulum terbalik bisa berayun ke kiri atau ke kanan juga. Tujuannya adalah dengan menggerakkan gerobak (kotak coklat), pertahankan sudut ÿ sekecil mungkin.





Mengimplementasikan algoritma pembelajaran penguatan yang dapat berinteraksi dengan Gazebo lingkungan kami menggunakan bahasa Python 3.7 dengan beberapa dependensi dan perpustakaan, beberapa di antaranya library utama yang digunakan dalam pemrograman adalah numpy, rospy, openai_ros, tensorflow.

Kami juga telah menggunakan rilis terbaru algoritme DQN dari baseline OpenAI. Kami telah melakukan beberapa perubahan dalam lingkungan cartpole OpenAI_ROS yang ada untuk memfasilitasi menggunakan kembali kode di tahap selanjutnya dan lingkungan yang lebih rumit. Program ini terdiri dari 3 skrip utama:

• The "Robot Script" yang menangani komunikasi dengan cartpole kembali dan

sebagainya untuk mendapatkan data IMU untuk kecepatan sudut, pitch, dan roll, dan kecepatan pengiriman

perintah ke cartpole

• "Skrip Tugas" yang menangani penghitungan hadiah, mengumpulkan pengamatan,

menghasilkan tindakan dan inisialisasi simulasi setelah setiap episode pelatihan.

• "Skrip Utama" yang memuat algoritme DQN dasar dan mengatur semua parameter.

3 skrip ini ditulis dalam bentuk kelas dan bahasa Python dan mewarisi semua data dan fungsi

dari satu orang ke orang lainnya. OpenAI_ROS adalah versi OpenAI_Gym yang sangat membantu implementasi algoritma RL untuk studi kasus ini [20]. Struktur keseluruhan dari

tampilan program pada gambar 3.5. Kami mempertimbangkan dua faktor untuk fungsi penghargaan dari pembelajaran penguatan, salah satunya adalah sudut tiang yang datang dari sensor di atas dan yang lainnya adalah posisi gerobak yang bergerak kekiri atau ke kenan. Setiap kali tindakan diberikan ke sistem kemudian hadiah dihitung, dan kami memeriksa apakah kami harus mengatur ulang lingkungan ke tahap awal atau melanjutkan belajar.



Persamaan 3.1 menunjukan fungsi hadiah, sudut dapat bervariasi dari -1,57 hingga =1,57 radian sebagai per sifat fisik jadi hadiah terbaik adalah ketika tiang tepat di posisi vertikal, posisi gerobak deapat bervariasi dari -2,5m hingga =2,5m sehingga hadiah terbaik diberikan saat gerobak berada dekat dengan pusat. Kami menggunakan cosinus dari dua input termasuk bobot untuk menghitung total penghargaan. Lebih berat dipertimbangkan untuk menjaga tiang dalam poisis vertikal daripada berada di luar zona.



Kami juga memiliki fungsi batas lain untuk mendeteksi kapan lingkungan diatur ulang untuk memulai kembali apisode berikutnya, fungsi ini memeriksa batas sudut tiang dan posisi gerobak. Jika poisis gerobak lebih dari 2 meter dari pusat atau sudut tiang melebihi 0,35 radian maka kami anggap gagal dan enviroment harus direset, pembelajaran masih belanjut sampai langkah dan episode total yang ditentukan mencapai atau penyelesaian masalah yang mencapai 300 hadiah sebagai kuadrat rata rata.

Untuk keluaran ke lingkungan atau tindakan simulasi, kami mempertimbangkan 2 tindakan untuk ditinggalkan kecepatan atau mengurangi kecepatan. Kecepatan negatif berarti hanya kecepatan ke arah lain. Setelah menjalankan program semua node dan koneksi diperbarui dan dapat dilihat pada gambar 3.6. Cartpole_gym adalah simpul yang dibuat oleh program pelatihan utama, menerima joint menyatakan dan data IMU dan kemudian menghasilkan perintah kecepatan, perintah hanya menerbitkan data pada topik yang lain yang diterima oleh lingkungan Simulasi Gazebo. Menggunakan ROS memungkinkan kita dengan kita dengan cepat beralih dari lingkungan simulasi ke robot nyata hanya dengan mengubah IP sistem Gazebo ke lingkungan fisik aktual.

 




 
Program[kembali]

PROGAM (Keseimbangan Inverted Pendulum)

URDF SIMULASI INVERTED PENDULUM PADA ROS

<?xml version="1.0" encoding="utf-8" ?>
<robot name="cartpole_v0">
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.
so">
<robotNamespace>/cartpole_v0</robotNamespace>
</plugin>
</gazebo>
<!-- * * * Link Definitions * * * -->
<!-- * * * Define World Link to fix the foot rail to the world * * * -
->
<link name="world"/>
<link name="bar_link">
<visual>
<origin xyz="0 0 0.4" rpy="0 0 0"/>
<geometry>
<box size="0.05 0.05 0.8"/>
</geometry>
<material name="green">
<color rgba="0.9 0.8 0.6 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0.4" rpy="0 0 0"/>
<geometry>
<box size="0.05 0.05 0.8"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.4" rpy="0 0 0"/>

<mass value="1"/> 
<inertia ixx="0.0535416666667" ixy="0.0" ixz="0.0" iyy="0.0535
416666667" iyz="0.0" izz="0.000416666666667"/>
</inertial>
</link>
<gazebo reference="bar_link">
<kp>1000.0</kp>
<kd>1000.0</kd>
<mu1>0.5</mu1>
<mu2>0.5</mu2>
<material>Gazebo/Green</material>
</gazebo>
<link name="base_link">
<visual>
<origin xyz="0 0 0.2" rpy="0 0 0"/>
<geometry>
<box size="0.4 0.2 0.2"/>
</geometry>
<material name="black">
<color rgba="0 0 0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0.2" rpy="0 0 0"/>
<geometry>
<box size="0.4 0.2 0.2"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.2" rpy="0 0 0"/>
<mass value="2.5"/>
<inertia ixx="0.0166666666667" ixy="0.0" ixz="0.0" iyy="0.0416
666666667" iyz="0.0" izz="0.0416666666667"/>
</inertial>
</link>
<gazebo reference="base_link">
<kp>1000.0</kp>
<kd>1000.0</kd>
<mu1>0.5</mu1>
<mu2>0.5</mu2>
<material>Gazebo/Black</material>
</gazebo>
<link name="foot_link">
<visual>
<origin xyz="0 0 0.05" rpy="0 0 0"/>
<geometry>
<box size="6 0.025 0.1"/>
</geometry>
<material name="white">
<color rgba="1 1 1 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0.05" rpy="0 0 0"/>
<geometry>
<box size="6 0.025 0.1"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.05" rpy="0 0 0"/>
<mass value="5"/>
<inertia ixx="0.00442708333333" ixy="0.0" ixz="0.0" iyy="15.00
41666667" iyz="0.0" izz="15.0002604167"/>
</inertial>
</link>
<gazebo reference="foot_link">
<kp>1000.0</kp>
<kd>1000.0</kd>
<mu1>0.5</mu1>
<mu2>0.5</mu2>
<material>Gazebo/White</material>
</gazebo>
<!-- * * * Joint Definitions * * * -->
<joint name="cartpole_joint" type="revolute">
<parent link="base_link"/>
<child link="bar_link"/>
<origin xyz="0 0 0.32" rpy="0 0 0"/>
<dynamics damping="0.0" friction="0.1"/>
<limit lower="-1.57" upper="1.57" effort="1" velocity="100"/>
<axis xyz="0 1 0"/>
</joint>
<joint name="foot_joint" type="prismatic">
<parent link="foot_link"/>
<child link="base_link"/>
<limit lower="-
2.0" upper="2.0" effort="2000000" velocity="100000"/>
</joint>
<joint name="fixed" type="fixed">
<parent link="world"/>
<child link="foot_link"/>
</joint>
<link name="sensor_box">
<inertial>
<origin xyz="0 0 0" rpy="0 0 0"/>
<mass value="0.01" />
<inertia ixx="0.000001083" ixy="0.0" ixz="0.0" iyy="0.00000108
3" iyz="0.0" izz="0.0000015"/>
</inertial>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.1 0.1 0.08"/>
</geometry>
</collision>
<visual>
<geometry>
<box size="0.08 0.08 0.05"/>
</geometry>
<material name="red">
<color rgba="1.0 0 0 1.0"/>
</material>
</visual>
</link>
<joint name="sensor_joint" type="fixed">
<parent link="bar_link"/>
<child link="sensor_box"/>
<origin xyz="0 0 0.81" rpy="0 0 0"/>
</joint>
<gazebo reference="sensor_box">
<kp>10000000</kp>
<kd>10000000</kd>
<mu1>10.0</mu1>
<mu2>10.0</mu2>
<material>Gazebo/Red</material>
</gazebo>
<!-- IMU sensor -->
<gazebo>
<plugin name="gazebo_ros_imu_controller" filename="libgazebo_ros_i
mu.so">
<frameName>my-imu</frameName>
<robotNamespace>/cartpole_v0</robotNamespace>
<topicName>imu/data</topicName>
<serviceName>imu/service</serviceName>
<bodyName>sensor_box</bodyName>
<gaussianNoise>0</gaussianNoise>
<rpyOffsets>0 0 0</rpyOffsets>
<!--<updateRate>50.0</updateRate>-->
<alwaysOn>true</alwaysOn>
<gaussianNoise>0</gaussianNoise>
</plugin>
</gazebo>
<!-- * * * Transmission Definitions * * * -->
<transmission name="pole_joint_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="cartpole_joint">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwa
reInterface>
</joint>
<actuator name="pole_jointMotor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwa
reInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
<transmission name="foot_joint_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="foot_joint">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwa
reInterface>
</joint>
<actuator name="foot_jointMotor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwa
reInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</robot>



goal_step = 500
score_min = 60
iterasi = 10000
training_data = []
scores = []
accepted_scores = []

observation = env.reset()

while True:
  
    env.render()
    
    #disini agent
    action = env.action_space.sample() 
         
    observation, reward, done, info = env.step(action) 
    print(observation,reward,done,info)
        
    if done: 
      break;

env = wrap_env(gym.make("CartPole-v1"))

for _ in range(iterasi):
    score = 0
    game_memory = []
    prev_observation = []
    
    env.reset()
    for t in range(goal_step):
      #env.render()
      
      action = random.randrange(0,2)
      observation, reward, done, info = env.step(action) 
      
      if len(prev_observation) > 0:
        game_memory.append([prev_observation, action])
        
      prev_observation = observation
      score += reward
      
      if done:
        break;

    if score >= score_min:
      accepted_scores.append(score)
      for data in game_memory:
        if data[1] == 1:
          output = [0,1]
        
        elif data[1] == 0:
          output = [1,0]
        
        training_data.append([data[0], output])
    
    env.reset()
    scores.append(score)
    
training_data_save = np.array(training_data)
np.save('saved.npy', training_data_save)
  
print('average accepted score',mean(accepted_scores))
print('Median accepted score', median(accepted_scores))
print(Counter(accepted_scores))

print("Panjang data training:" , len(training_data))

def build_model(input_sizeoutput_size):
    model = keras.models.Sequential()
    model.add(keras.layers.Dense(128, input_dim=input_size, activation='relu'))
    model.add(keras.layers.Dropout(0.2))
    model.add(keras.layers.Dense(256, activation='relu'))
    model.add(keras.layers.Dropout(0.2))
    model.add(keras.layers.Dense(512, activation='relu'))
    model.add(keras.layers.Dropout(0.2))
    model.add(keras.layers.Dense(256, activation='relu'))
    model.add(keras.layers.Dropout(0.2))
    model.add(keras.layers.Dense(128, activation='relu'))
    model.add(keras.layers.Dense(output_size, activation='linear'))
    model.compile(loss='mse', optimizer=keras.optimizers.Adam())
    return model
def train_model(training_data):
    X = np.array([i[0for i in training_data]).reshape(-1len(training_data[0][0]))
    y = np.array([i[1for i in training_data]).reshape(-1len(training_data[0][1]))
    model = build_model(input_size=len(X[0]), output_size=len(y[0]))
    
    model.fit(X, y, epochs=14)
    return model
%%time
tmodel = train_model(training_data)



Video[kembali]

Simulasi 


Aplikasi






Penjelasan Reinforcement Learning

 

 

 

 

Link Donwload[kembali]

  PRAKTIKUM  ELEKTRONIKA DAN SISTEM DIGITAL OLEH : ATHALLA NOVANDRI (1910952040) DOSEN PENGAMPU: Dr. Darwison, M.T REFERENSI Darwison, 2011,...