#LyX 1.5.5 created this file. For more info see http://www.lyx.org/ \lyxformat 276 \begin_document \begin_header \textclass scrartcl \language english \inputencoding auto \font_roman ae \font_sans default \font_typewriter default \font_default_family rmdefault \font_sc false \font_osf false \font_sf_scale 100 \font_tt_scale 100 \graphics default \paperfontsize default \spacing single \papersize default \use_geometry false \use_amsmath 1 \use_esint 1 \cite_engine basic \use_bibtopic false \paperorientation portrait \secnumdepth 3 \tocdepth 3 \paragraph_separation indent \defskip medskip \quotes_language english \papercolumns 1 \papersides 1 \paperpagestyle default \tracking_changes false \output_changes false \author "" \author "" \end_header \begin_body \begin_layout Title Podklady k diskusi na zadavani experimentu \end_layout \begin_layout Author Václav Šmídl \end_layout \begin_layout Date 28. května 2008 \end_layout \begin_layout Section Cíl: uživatelsky přítulné a efektivní zadávání experimentů \end_layout \begin_layout Standard Mělo by být snadné zadat a použít následující typy experimentů a jejich kombinací: \end_layout \begin_layout Subsection Trivial: odhadnutí ARX modelu z dat \end_layout \begin_layout Standard Uživatel zadá \end_layout \begin_layout Itemize datový soubor, \end_layout \begin_layout Itemize strukturu regresoru \end_layout \begin_layout Itemize způsob jakým se dozví výsledky. \end_layout \begin_layout Standard Mělo by být na úrovni předpřipraveného úkolu. \end_layout \begin_layout Subsection Iterators: cyklus přes několik možností \end_layout \begin_layout Standard Uživatel zadá \end_layout \begin_layout Itemize datový soubor, \end_layout \begin_layout Itemize výčet možných struktur regresorů (pole) \end_layout \begin_layout Itemize způsob vyhodnocení (pole?) \end_layout \begin_layout Standard Pro nestandardní typy výstupů může být třeba něco doprogramovat. \end_layout \begin_layout Subsection Shared parts: Agenti \end_layout \begin_layout Standard Uživatel zadá \end_layout \begin_layout Itemize vzorový popis agenta \end_layout \begin_layout Itemize pro každého dalšího agenta se načte ten vzorový a provedou se změny \end_layout \begin_layout Subsection Inheritance: výběr potomka \end_layout \begin_layout Standard Uživatel má (např. v dialogu) na výběr z několika různých variant algoritmu. V případě, že se liší parametrem se problém redukuje na triviální. \end_layout \begin_layout Standard Pokud varianty algoritmů jsou implementovány jako různé objekty pak by měl dostat na výběr nejnižšího přípustného, kterého je možné specializovat na jednotlivé potomky. \end_layout \begin_layout Standard Při změně potomka je třeba změnit zadání parametrů. Uchovávání společných nastavení by bylo hezké, ale není nutné. \end_layout \begin_layout Section Úrovně řešení \end_layout \begin_layout Standard Problém je rozvrstven do několika úrovní, přičemž na každé z nich lze provádět různě složité úkoly. Přehled: \end_layout \begin_layout Standard \begin_inset Tabular \begin_inset Text \begin_layout Standard GUI \end_layout \end_inset \begin_inset Text \begin_layout Standard Uživatelsky příjemná \begin_inset Quotes eld \end_inset klikací varianta \begin_inset Quotes erd \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Standard UserInfo \end_layout \end_inset \begin_inset Text \begin_layout Standard Naklikané výsledky jsou uloženy ve formě textových souborů, které se dají editovat. (Textový editor může být efektivnější než klikátka, např. global Replace) \end_layout \end_inset \begin_inset Text \begin_layout Standard Experiment \end_layout \end_inset \begin_inset Text \begin_layout Standard Zadané UserInfo se otestuje na platnost a vyrobí se spustitelný kód. Na této úrovni je třeba ošetřit iterátory atp. \end_layout \end_inset \begin_inset Text \begin_layout Standard Library \end_layout \end_inset \begin_inset Text \begin_layout Standard Sada funkcí a objektů které jsou experimentem volány. \end_layout \end_inset \end_inset \end_layout \begin_layout Standard Obecně tento přístup máme naimplementován ve dvou variantách: \end_layout \begin_layout Subsection Jobcontrol \end_layout \begin_layout Standard Je výsledkem vývoje \begin_inset Quotes eld \end_inset zdola-nahoru \begin_inset Quotes erd \end_inset proto napíšu obráceně: \end_layout \begin_layout Description Library knihovna mixtools \end_layout \begin_layout Description Experiment z experimentů ve formě m-filů, které prováděl Ivan postupně vykrystal izovala obecná šablona, ve které se pouze zaškrtávalo provést/neprovést. \end_layout \begin_layout Description UserInfo projekt jobcontrol měl za úkol usnadnit zadávání této šablony tím, že se napíšou pouze relevantní parametry a automaticky se sestaví vzorový m-file. \end_layout \begin_layout Description GUI po ustabilizování struktury UserInfa se napsalo GUI, které je šité výsledkům na míru. \end_layout \begin_layout Subsection Mix3k \end_layout \begin_layout Standard Systém byl od začátku navrhován tak, aby umožňoval automatické zadávání experimentu. Klíčovou roli hrají objekty: \end_layout \begin_layout Description Library knihovna se skládá z několika \begin_inset Quotes eld \end_inset výpočetních \begin_inset Quotes erd \end_inset objektů. Například objekt ARENA má atributy: \end_layout \begin_deeper \begin_layout Description environment: model prostředí (které může například přehrávat uložená data), a \end_layout \begin_layout Description participants: seznam aktivních objektů, které se umí v prostředí pohybovat. \end_layout \begin_layout Standard Kromě toho, má ARENA ma metodu run, která cyklicky volá metody environment.step() a participant(i).run(). \end_layout \end_deeper \begin_layout Description Experiment může být samostaný m-file vytvořený z prvků knihovny, nebo může být vygenerován z UserInfa. V extrémním případě může být \begin_inset listings lstparams "basicstyle={\ttfamily},language=Matlab" inline false status open \begin_layout Standard load UserInfo \end_layout \begin_layout Standard ARENA=build(UserInfo) \end_layout \begin_layout Standard run(ARENA) \end_layout \end_inset \end_layout \begin_layout Description UserInfo je klíčovou částí systému, je jednoznačnou parametrizací jednoho výpočetního objektu tj, má jeho parametry jako atributy a má metody: \end_layout \begin_deeper \begin_layout Description build která generuje výpočetní objekt \end_layout \begin_layout Description askuser která je zodpovědná za interakci s uživatelem, \end_layout \begin_layout Standard Kličové je, že \series bold atributem userinfa můžou být jiná UserInfa \series default . \end_layout \end_deeper \begin_layout Description GUI je automaticky generováno voláním metody askuser. V základní verzi se vytvoří prázdné UIExperiment a na něj se zavolá metoda askuser(). \end_layout \begin_layout Section Řešení základních scénářů v M3k \end_layout \begin_layout Subsection Trivial: \end_layout \begin_layout Standard Je definován ARXparticipant, který umí odhadovat ARX model a interagovat s prostředím pomocí DataSource. \end_layout \begin_layout Standard Je definováno UIarxparticipant, který se umí zeptat na parametry ARX modelu. \end_layout \begin_layout Standard Tj. při volání standardního Experimentu se vloží \end_layout \begin_layout Description environment typu čtení dat ze souboru \end_layout \begin_layout Description participant 1x UIarxparticipant. \end_layout \begin_layout Standard Po stisknutí tlačítka RUN se vygeneruje odpovídající ARENA. \end_layout \begin_layout Subsection Iterators \end_layout \begin_layout Standard Je podporováno pouze na úrovni Experiment. Tj. uživatel nakliká první experiment a vyrobí m-file: \begin_inset listings lstparams "basicstyle={\ttfamily},language=Matlab" inline false status collapsed \begin_layout Standard load UserInfo \end_layout \begin_layout Standard for i=1:5 \end_layout \begin_layout Standard ARENA.UIparticipants{i}.str = 1:i \end_layout \begin_layout Standard end \end_layout \begin_layout Standard ARENA=build(UserInfo) \end_layout \begin_layout Standard run(ARENA) \end_layout \end_inset \end_layout \begin_layout Standard Tj. přímé vkládání v GUI není podporováno. Informace o tom co a kdy změnit je třeba psát přímo do skriptu. \end_layout \begin_layout Standard Je možné navrhnout kombinaci, která vezme jiné userinfo a zpracuje ho: \end_layout \begin_layout Standard \begin_inset listings lstparams "basicstyle={\ttfamily},language=Matlab" inline false status collapsed \begin_layout Standard load UserInfo \end_layout \begin_layout Standard load Structures \end_layout \begin_layout Standard for i=1:5 \end_layout \begin_layout Standard ARENA.UIparticipants{i}.str = Structures{i} \end_layout \begin_layout Standard end \end_layout \begin_layout Standard ARENA=build(UserInfo) \end_layout \begin_layout Standard run(ARENA) \end_layout \end_inset \end_layout \begin_layout Subsection Shared parts \end_layout \begin_layout Standard Je možné dosáhnout použitím stejného přístupu jako v předchozím případě. V UserInfu by byl jen jeden agent a ve for cyklu by se měnil. \end_layout \begin_layout Standard Další přístup, ketrý je udělán na úrovni GUI je save/load mechanismus, UserInfo vytvořené pro jednoho agenta se uloží na disk a pak se načte jako jiný agent. \end_layout \begin_layout Description Nevýhoda: Ztrácí se spojení s původním objektem. Pokud se ten změní tak se to nedozvíme... \end_layout \begin_layout Subsection Inheritance \end_layout \begin_layout Standard Je řešeno manuálně v UI objektu, který dané objekty používá. Tj. v UIExperiment.ask() jsou vyjmenovány všechny UI enviromentů a participantů, které známe. \end_layout \begin_layout Description Nevýhoda: Pracné a neefektivná. \end_layout \begin_layout Section Nové XML rozhraní \end_layout \begin_layout Standard Co od toho očekávám: \end_layout \begin_layout Itemize Popis UserInfa v XML (nebo snad XSD?), \end_layout \begin_layout Itemize vylepšení možností scénářů iterators, inheritance a shared parts. \end_layout \begin_layout Itemize GUI editovatelnost ala \begin_inset LatexCommand url name "KXMLeditor" target "http://kxmleditor.sourceforge.net/screenshots/screenshots.html" \end_inset , který se ale už nevyvíjí... \end_layout \begin_layout Standard Čeho se bojím \end_layout \begin_layout Itemize Automatického GUI, kromě výše zmíněného KXMLeditoru jsem nic podobného nenašel... \end_layout \begin_layout Itemize Definice UserInfa přes XSD není zrovna jednoduché \end_layout \begin_layout Itemize Původní metoda build by se dala udělat přes metodu \emph on post_hello() \emph default , ale co a askuser? Dá se to zakomponovat do XSD? \end_layout \end_body \end_document