#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
<lyxtabular version="3" rows="4" columns="2">
<features>
<column alignment="center" valignment="top" leftline="true" width="0">
<column alignment="left" valignment="top" leftline="true" rightline="true" width="70text%">
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\begin_layout Standard
GUI
\end_layout

\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\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
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\begin_layout Standard
UserInfo
\end_layout

\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\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
</cell>
</row>
<row topline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\begin_layout Standard
Experiment
\end_layout

\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\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
</cell>
</row>
<row topline="true" bottomline="true">
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\begin_layout Standard
Library
\end_layout

\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\begin_layout Standard
Sada funkcí a objektů které jsou experimentem volány.
\end_layout

\end_inset
</cell>
</row>
</lyxtabular>

\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
