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

Virtuelle .txt Datei

 

Maschi87
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 22.12.11
Wohnort: Im Wald
Version: ---
     Beitrag Verfasst am: 18.11.2014, 10:41     Titel: Virtuelle .txt Datei
  Antworten mit Zitat      
Hi,

im Rahmen einer Studienarbeit bin ich daruf angewiesen, die Freeware Funktion eines Reifenmodells zu nutzen. Der Aufruf sieht wie folgt aus:

Code:
VARINF = dteval(FILNAM,INPUTS,USE_MODE)


Mein Problem ist, dass die Variable FILNAM ein String sein muss, der eine z.B. eine .txt Datei angibt. In dieser sind dann die Parametereinstellungen für das Modell hinterlegt. Da ich aber das ganze zu entsprechende Messdaten optimierne möchte, müsste ich diese Datei sehr oft überschreiben, was wahrscheinlich zu einer langen Rechenzeit führen würde.

Daher die Frage ob es eine Möglichkeit gibt, z.B. eine Variable im Workspace anzulegen, die wie eine .txt Datein interpretiert wird? Dann wäre nur noch die Frage wie ich diese aufrufe, da dteval als FILNAM einen String erwartet.

Das sollte zum einen die Rechenzeit beschleunigen und zum anderen müsste ich nicht mein gesamtes Optimierungsprogramm überarbeiten, dass bisher eine Struktur mit den entsprechenden Parametern nutzt Wink

Gruß,
Benedikt

PS: Die Datei muss keine .txt Datei sein. Eine .tir Datei ist auch möglich, ich weiss zwar nicht was der untschied ist (leider) aber falls das leicher wäre!?
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.11.2014, 13:26     Titel:
  Antworten mit Zitat      
Geht es hier nur um das Abspeichern von FILNAM oder auch der Daten selbst?

Man kann Daten im Workspace als *.mat Datei ablegen...

Code:
save % speicher mat file
load % lade mat file
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2014, 15:03     Titel:
  Antworten mit Zitat      
In Deiner Funktion wird mit Sicherheit versucht, eine Datei zu finden, die so heißt und die dann geöffnet und eingelesen.

Es ist aber sehr wahrscheinlich, dass Du mit
Code:
den Quellcode der Funktion angucken kannst. Den kannst Du Dir ja so umschreiben, dass Du direkt den Parametersatz (z.B. als cell) an Die Funktion übergibst und nicht den Dateinamen zu der Datei, die dann ausgelesen wird.

Wie oft würdest Du die Datei bei deiner Optimierung denn ungefähr schreiben und wie groß ist so ein Parametersatz denn?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maschi87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 22.12.11
Wohnort: Im Wald
Version: ---
     Beitrag Verfasst am: 18.11.2014, 16:09     Titel:
  Antworten mit Zitat      
@ Epfi

Nein den code kann ich mir so nicht ansehen. Ich bekomme damit nur die gleichen Infos wie über

Code:
help dteval


Den eigentlichen Quellcode kann ich nicht sehen. Verständlich da die Erstellung eines solchen Reifenmodells auch kommerziell genutzt wird.

@ DSP

Nein in der Datei, die unter filnam angegeben wird steht dann beispielsweise

Code:

[LONGITUDINAL_COEFFICIENTS]
PCX1                     = 1.579
PDX1                     = 1.0422    
PDX2                     = -0.0827
PDX3                     = 0
PEX1                     = 0.11185
 


Die ganze Liste sind dann mehrer hundert solcher Parameter. Diese Parameter dienen dann als Einstellungen für das Reifenmodell. Die Lasten auf das Modell sind in INPUTS.
Für die Optimierung müssen nun diese Einstellungen sehr oft variiert werden, um schließlich die optimalen Einstellungen zu finden, um einen bestimmten Reifen virtuell nach zu bilden.
Die Variationen der Parameter stammen aus dem gentischen Algorithmus ga. Diese liegen mir dann in einem Vektor vor.
Da dteval aber nur einen String mit dem Namen der .txt Datei akzeptiert müsste ich für jede Variation die .txt Datei verändern. Das finde ich etwas umständlich.
Bisher habe ich eine Struktur genutzt, die alle Parameter enthält und in der ich dann einfach die zu variierenden verändern kann. Leider hat sich gezeigt, dass das Reifenmodell, das ich zunächst hatte, fehlerhaft ist, so dass ich nun auf dieses Modell (dteval) ausweichen muss.

Bsilang fällt mir als einzige Möglichkeit ein in der .txt Datei die entsprechenden Parameter zu suchen und dann durch die neue Variation zu ersetzen. Zum einen bedeutet das für mich eine Menge arbeit eine entsprechende Funktion zu schreiben, die dies erledigt. Zum anderen würde dieser Vorgang während einer Optimierung z.T. mehrer Millionen mal ausgefürt. Ich denke mal, dass das eine Menge Rechenzeit kostet, verglichen mit einer simplen Änderung einer Variablen in einer Struktur.

Gruß,
Benedikt
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.11.2014, 16:22     Titel:
  Antworten mit Zitat      
Jetzt habe ich zumindest das Problem verstanden.

Aber eine Lösung habe ich nicht. Wenn die Funktion dteval eine Textdatei benötigt, wird dir wohl nicht anderes übrig bleiben, als die Textdatei immer wieder zu aktualisieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2014, 16:26     Titel:
  Antworten mit Zitat      
Vielleicht ist es sogar schneller, die Textdatei jedes Mal komplett neu zu schreiben, statt sie nur ein einer Stelle zu ändern.

Vermutlich steckt in der Funktion irgendwo eine Zeile, die in etwa so aussieht:
Code:
fid = fopen(FILNAM, 'r');

Das wirst Du nicht ohne weiteres umschiffen können, dass das Programm da einen Dateizugriff vornimmt.

Aber wenn Du wirklich, wirklich viele Schreib-/Lesezugriffe machst und das Schreiben und Lesen selbst schon nennenswert Zeit in Anspruch nimmt, könntest Du die Datei in einer RAM-Disk ablegen. So eine kannst Du zum Beispiel ImDisk ( http://www.ltr-data.se/opencode.html/#ImDisk ) einrichten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Maschi87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 22.12.11
Wohnort: Im Wald
Version: ---
     Beitrag Verfasst am: 25.11.2014, 12:16     Titel:
  Antworten mit Zitat      
Hi,
also ich mache es jetzt genau so wie Epfi geschrieben hat und schreibe die .txt Datei jedes mal neu. Das ist natürlich deutlich langsamer als vorher.
Außerdem hat sich genzeigt, dass dann auch die Möglichkeit

Code:


zu nutzen weg fällt. Das hatte ich schon befürchtet, da ja dann verschiedene Kerne die Datei neu schreiben und dadurch die Datei, die andere Kerne noch nutzen, schon überschrieben wird.
Ich bin auf dem Gebiet nicht ganz so fit, falls da jemand eine Idee hat, wie man das Problem lösen kann (z.B. indem man irgendwie jeden Kern seine eigene temporäre .txt Datei erstellen lässt) wäre ich euch dankbar.

Ansonsten werde ich mir noch die Möglicheit die Epfi genannt hat ansehen, die Datei im Ramspeicher abzulegen. Das söllte auf jeden Fall den Prozess auch beschleunigen.

Gruß,
Benedikt
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.11.2014, 12:27     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
z.B. indem man irgendwie jeden Kern seine eigene temporäre .txt Datei erstellen lässt)

Du kannst ja labindex in den Dateinamen integrieren. Dann heißt die Datei bei jedem Kern anders.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Maschi87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 22.12.11
Wohnort: Im Wald
Version: ---
     Beitrag Verfasst am: 25.11.2014, 12:31     Titel:
  Antworten mit Zitat      
Hi,
ja das ist mir auch eingefallen. Ich muss nur jede Datei dann direkt wieder löschen sonst liegen am Ende mehrere Millionen Dateien in meinem Verzeichnis Wink

Wie funktioniert das denn mit dem parallelem berechen in der Optimierung. Ich stelle mir das so vor, dass
Code:


dann jeden Kern einzeln die Gütefunktion komplett berechnen lässt. Dann müsste ich doch am Ende der Gütefunktion die .txt Datei direkt wieder löschen können, da dann der Kern die nächste Gütefunktion bekommt!?!?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.11.2014, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich muss nur jede Datei dann direkt wieder löschen sonst liegen am Ende mehrere Millionen Dateien in meinem Verzeichnis

Bei der Arbeit mit labindex (nicht dem Schleifenindex!) wirst du wirklich nur soviele Dateien wie Kerne haben.

Für ga würde ich mit gaoptimset die Option 'UseParallel' auf true setzen. Das wirst du allerdings mit dem labindex-Ansatz kombinieren müssen, damit die Kerne sich nicht in die Quere kommen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2014, 14:14     Titel:
  Antworten mit Zitat      
Maschi87 hat Folgendes geschrieben:
Hi,
also ich mache es jetzt genau so wie Epfi geschrieben hat und schreibe die .txt Datei jedes mal neu. Das ist natürlich deutlich langsamer als vorher.


Hast Du es mal mit ner Ramdisk versucht? Wenn wirklich die Lese-/Schreibzugriffe limitierend sind, solltest Du damit doch einiges an Geschwindigkeit rausholen können.
Private Nachricht senden Benutzer-Profile anzeigen
 
Maschi87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 22.12.11
Wohnort: Im Wald
Version: ---
     Beitrag Verfasst am: 25.11.2014, 18:00     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich bin mir nicht ganz sicher ob ich das richtig verstanden habe? Was Du schreibst hört sich für mich folgendermaßen an:

Code:

% 1. Schritt
'UseParallel','true'

% 2. Schritt: In der Gütefunktion steht
core_id = labindex;

% 3. Schritt: In der Gütefunktion wird die Funktion zum erstellen der .txt Datei so aufgerufen, dass der Name der .txt Datei die core_id enthält, so dass diese zugeordnet werden kann.

Temp_Tir_Datei = OPTI_Temporaere_tir_Datei_schreiben_(paras, core_id);
 


Habe ich das so richtig verstanden?

Gruß,
Benedikt

edit: Also so klappt es nicht. Die Anzahl, wie oft die Gütefunktion aufgreufen wird, bis dann ein Fehler beim erstellen der .txt Datei auftritt variiert allerdings.
Private Nachricht senden Benutzer-Profile anzeigen
 
Maschi87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 22.12.11
Wohnort: Im Wald
Version: ---
     Beitrag Verfasst am: 25.11.2014, 18:27     Titel:
  Antworten mit Zitat      
Epfi hat Folgendes geschrieben:

Hast Du es mal mit ner Ramdisk versucht? Wenn wirklich die Lese-/Schreibzugriffe limitierend sind, solltest Du damit doch einiges an Geschwindigkeit rausholen können.


Hallo Epfi,

nein das habe ich noch nicht versucht. Das würde mit Sicherheit einiges an Geschwindigkeit heraus holen, allerdings werden später noch andere Studenten mit meinem Tool weiter arbeiten, so dass ich versuche eine reine Matlab Lösung zu finden. Sonst müssen die Leute nach mir sich auch immer erst ein Ramdisk erstellen. Aber generell eine sehr gute Idee. Das wäre dann ja beinahe meine Wunschvorstellung von einer virtuellen .txt Datei in Matlab. Die währe dann ja auch nach einem Reboot weg, genau wie die Datei im Ramdisk.

Bietet Matlab vielleicht intern die Möglichkeit zu einem Ramdisk? Bislang konnte ich dazu nichts finden.

Gruß,
Benedikt
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2014, 18:31     Titel:
  Antworten mit Zitat      
Maschi87 hat Folgendes geschrieben:
Sonst müssen die Leute nach mir sich auch immer erst ein Ramdisk erstellen.

Müssen tun sie nicht, das Programm läuft dann eben nur wieder langsamer. Wenn Du das Programm so schreibst, dass der Speicherort der temporären Dateien konfigurierbar ist, kann das dann ja jeder so einstellen, wie er möchte.

Zitat:
Bietet Matlab vielleicht intern die Möglichkeit zu einem Ramdisk? Bislang konnte ich dazu nichts finden.

Mit Sicherheit nicht, Ramdisks sind eher auf der System-Ebene zu verorten. In der Regel muss dafür auch ein Treiber installiert werden, ist also eher nicht etwas, was man mit Matlab schreiben würde.
Private Nachricht senden Benutzer-Profile anzeigen
 
Maschi87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 22.12.11
Wohnort: Im Wald
Version: ---
     Beitrag Verfasst am: 25.11.2014, 18:36     Titel:
  Antworten mit Zitat      
Epfi hat Folgendes geschrieben:

Müssen tun sie nicht, das Programm läuft dann eben nur wieder langsamer. Wenn Du das Programm so schreibst, dass der Speicherort der temporären Dateien konfigurierbar ist, kann das dann ja jeder so einstellen, wie er möchte.


Ok, dass ist auf jeden Fall eine Möglichkeit. Die werde ich mal im Hinterkopf behalten. Zumindest für meine Arbeit werde ich das nutzen können um meine Optimierungen zu beschleunigen. Wobei ich da noch ausprobieren muss, was dann schneller ist. Mein PC mit Ramdisk und 2 Kernen oder die Möglichkeit im Rechenzentrum wahrscheinlich ohne Ramdisk, da ich dort wahrscheinlich nicht einfach so etwas einrichten darf, dafür aber mit 12 Kernen rechnen kann Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.