WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Algorithmus ist zu langsam (Teil einer MDP-Toolbox)

 

Soeren
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 05:16     Titel: Algorithmus ist zu langsam (Teil einer MDP-Toolbox)
  Antworten mit Zitat      
Hallo Matlabforum,

ich arbeite gerade an einem System mit Markov Decision Process und bin an folgendem Punkt auf eine Wand gestoßen:

Code:

function Q = Q_from_V(V, T, R, discount_factor)
% Q(s,a) = R(s,a) + sum_s' T(s,a,s') * gamma * V(s')

S = size(T,1);
A = size(T,2);
Q = zeros(S,A);

for a=1:A
  Q(:,a) = R(:,a) + squeeze(T(:,a,:))*discount_factor*V;
end

 


Diese Schleife arbeitet gerade immer noch (nach 40 minuten) und ich verstehe nicht warum. T ist eine 2016x27x2016 Matrix, V 2016x1, R 2016x27.

Natürlich ist das eine immense Menge, aber alle übrigen Schleifen die mit der Datenmenge zu tun haben laufen akzeptabel schnell. Eventuell verstehe ich squeeze nicht ganz richtig (gibt es alternativen zu diesem Befehl die schneller laufen?).

Über Antworten würde ich mich sehr freuen, auch wenn es nur die Bestätigung ist das es keinen anderen Weg gibt.

Gruß,
Sören
Private Nachricht senden Benutzer-Profile anzeigen


Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 09:49     Titel:
  Antworten mit Zitat      
Hi,

bist du sicher, dass es an dieser Schleife liegt?
Bei mir braucht es mit den von dir vorgegebenen Größen etwa 2 Sekunden.
Hast du es schonmal mit kleineren Matrixgrößen versucht?
 
Soeren
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 17:21     Titel:
  Antworten mit Zitat      
Leider ja, sobald den teil hinter R(:,a) auskommentiere läuft es sofort durch.

// edit: Vielen Dank schonmal, die schleife ist es tatsächlich nicht, sondern ein Folge fehler.

Ich habe mal meinen workspace angehängt.

Die Toolbox gibt es hier:

http://www.cs.ubc.ca/~murphyk/Software/MDP/mdp_download.html

das ist der Teil den ich starte:

Code:

[P, V, Q, iter] =  policy_iteration(T, R, discount_factor, 0, oldp);
 


na leichtem Debuggen habe ich entdeckt, dass er bei dieser if-abfrage nicht mehr auf true kommt:

Code:

 if isequal(p, oldp) || approxeq(Q, oldQ, 1e-3)
 

policy_iteration.m (zeile 39).

Gruß,
Sören

matlab.rar
 Beschreibung:

Download
 Dateiname:  matlab.rar
 Dateigröße:  76.97 KB
 Heruntergeladen:  331 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Soeren
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 18:03     Titel:
  Antworten mit Zitat      
// edit, in meiner Panik hatte ich eine schwachsinnige Loesung.

Die Frage bleibt, wieso erkennt isequal nicht das sie gleich sind...

Gruß,
Sören
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.01.2012, 18:25     Titel:
  Antworten mit Zitat      
Hallo,

es ist für Unbeteiligte immer schwierig, einen unbekannten Algorithmus zu analysieren und zu verstehen.
Wäre es nicht einfacher, den Autor des Programms zu kontaktieren?

Die letzte Frage ist immerhin einfacher zu beantworten:
Zitat:
Die Frage bleibt, wieso erkennt isequal nicht das sie gleich sind...

Weil sie nicht gleich sind.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.01.2012, 18:38     Titel: Re: Algorithmus ist zu langsam (Teil einer MDP-Toolbox)
  Antworten mit Zitat      
Hallo Soeren,

Es hilft, wiederholte Berechnungen aus der Schleife herauszuziehen:
Code:

function Q = Q_from_V(V, T, R, discount_factor)

[S, A, s3] = size(T);
Q = zeros(S,A);

dV = discount_factor * V;
for a=1:A
  Q(:, a) = reshape(T(:, a, :), S, s3) * dV;
end
Q = Q + R;

Ist das schneller?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Soeren
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 18:45     Titel:
  Antworten mit Zitat      
wow, vielen Dank, das ist schon wesentlich schneller.

Aber leider hat Harald recht, isequal liefert false weil sie nicht gleich sind. Nun muss ich mich auf die Suche machen wieso oldp und p oszillieren... Hab schon versucht das mit R = rand(2016,27) + R zu lösen, aber es bringt nichts.
Private Nachricht senden Benutzer-Profile anzeigen
 
Soeren
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 04.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2012, 21:11     Titel:
  Antworten mit Zitat      
Okey, vielen Dank für eure Hilfe, ich habe das Problem jetzt gelöst indem ich den discount faktor auf 0.5 gesetzt habe. Das stärkt den immediate Reward soweit, das er keine tie - Situationen mehr findet. Keine schöne Lösung, aber für den augenblick gut genug.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.