[Toss-devel-svn] SF.net SVN: toss:[1360] trunk/Toss
Status: Beta
Brought to you by:
lukaszkaiser
|
From: <luk...@us...> - 2011-03-15 00:46:20
|
Revision: 1360
http://toss.svn.sourceforge.net/toss/?rev=1360&view=rev
Author: lukaszkaiser
Date: 2011-03-15 00:46:12 +0000 (Tue, 15 Mar 2011)
Log Message:
-----------
WebClient debug, reference update, www translation fixes.
Modified Paths:
--------------
trunk/Toss/WebClient/Login.js
trunk/Toss/WebClient/index.html
trunk/Toss/www/Makefile
trunk/Toss/www/contact.xml
trunk/Toss/www/develop.xml
trunk/Toss/www/reference/Makefile
trunk/Toss/www/reference/reference.bib
trunk/Toss/www/reference/reference.tex
Modified: trunk/Toss/WebClient/Login.js
===================================================================
--- trunk/Toss/WebClient/Login.js 2011-03-14 11:11:08 UTC (rev 1359)
+++ trunk/Toss/WebClient/Login.js 2011-03-15 00:46:12 UTC (rev 1360)
@@ -46,13 +46,16 @@
}
// Onload handler
-function startup () {
+function startup (game) {
if (navigator.userAgent.indexOf('MSIE') !=-1) {
document.getElementById("nosvg").style.display = "block";
} else {
var udata = srv("USERPLAYS", "user");
if (udata != "") { setup_user (udata.split("$")) };
}
+ if (game != "") {
+ new_play_guest (game);
+ }
}
// Html of the list item for adding new opponents.
Modified: trunk/Toss/WebClient/index.html
===================================================================
--- trunk/Toss/WebClient/index.html 2011-03-14 11:11:08 UTC (rev 1359)
+++ trunk/Toss/WebClient/index.html 2011-03-15 00:46:12 UTC (rev 1360)
@@ -16,7 +16,7 @@
<script type="text/javascript" src="Login.js"> </script>
</head>
-<body onload="startup()">
+<body onload="startup('')">
<div id="main">
Modified: trunk/Toss/www/Makefile
===================================================================
--- trunk/Toss/www/Makefile 2011-03-14 11:11:08 UTC (rev 1359)
+++ trunk/Toss/www/Makefile 2011-03-15 00:46:12 UTC (rev 1360)
@@ -6,3 +6,6 @@
ln -fs ../Toss.docdir code_doc
cp code_doc/index.html code_doc/index.html.en
cp code_doc/index.html code_doc/index.html.de
+ cp code_doc/index.html code_doc/index.html.de
+ cp code_doc/index.html code_doc/index.html.pl
+ cp code_doc/index.html code_doc/index.html.fr
Modified: trunk/Toss/www/contact.xml
===================================================================
--- trunk/Toss/www/contact.xml 2011-03-14 11:11:08 UTC (rev 1359)
+++ trunk/Toss/www/contact.xml 2011-03-15 00:46:12 UTC (rev 1360)
@@ -24,7 +24,7 @@
<section title="Email" lang="de">
<par>Toss ist ein Open-Source Projekt, wird auf
<a href="http://sourceforge.net">SourceForge</a>
- gehosted und eine BSD Licence disribuiert.<br/></par>
+ gehosted und unter der BSD Lizenz disribuiert.<br/></par>
<par>Man kann uns unter folgener Addresse erreichen:
<mailto address="tos...@li..."/>
</par>
@@ -32,9 +32,9 @@
<section title="Email" lang="pl">
<par>Toss jest projektem open source z hostem na
<a href="http://sourceforge.net">SourceForge</a>
- i pod licencja BSD.<br/></par>
+ i pod licencją BSD.<br/></par>
<par>Najłatwiej się z nami skontaktować pisząc na
- <mailto address="tos...@li..."/>
+ <mailto address="tos...@li..."/>.
</par>
</section>
@@ -46,9 +46,9 @@
Toss Subversion Repository</a></item>
</itemize>
</section>
- <section title="Links von Toss" lang="de">
+ <section title="Links zu Toss" lang="de">
<itemize>
- <item><a href="http://sourceforge.net/projects/toss/">Toss Project at
+ <item><a href="http://sourceforge.net/projects/toss/">Toss Projekt auf
SourceForge.net</a></item>
<item><a href="http://toss.svn.sourceforge.net/viewvc/toss/trunk/Toss/">
Toss Subversion Repository</a></item>
@@ -56,7 +56,7 @@
</section>
<section title="Linki Tossa" lang="pl">
<itemize>
- <item><a href="http://sourceforge.net/projects/toss/">Toss Project at
+ <item><a href="http://sourceforge.net/projects/toss/">Projekt Toss na
SourceForge.net</a></item>
<item><a href="http://toss.svn.sourceforge.net/viewvc/toss/trunk/Toss/">
Toss Subversion Repository</a></item>
@@ -64,7 +64,7 @@
</section>
- <section title="Game Playing Links">
+ <section title="Game Playing Links" lang="en">
<itemize>
<item><a href="http://www.apronus.com/chess/wbeditor.php">Apronus Chess
Board Editor</a> is our favorite site for simple chess boards.
@@ -91,10 +91,65 @@
Turn</a> allows you to play various board games online.</item>
</itemize>
</section>
+ <section title="Links zu Spielprogrammen" lang="de">
+ <itemize>
+ <item><a href="http://www.apronus.com/chess/wbeditor.php">Apronus Chess
+ Board Editor</a> ist unser beliebter einfacher Schachbretteditor.
+ </item>
+ <item><a href="http://www.dozingcatsoftware.com/Gridlock/">Gridlock</a>
+ ist eine Sammlung von Open-Source Spielen. Es spielt nett, erlaubt
+ es aber nicht das Spiel zu editieren.
+ </item>
- <section title="Modelling Links">
+ <item><a href="http://www.zillions-of-games.com/">Zillions of Games</a>
+ ist eine Sprache für Spieldefinitionen, ein Simulator und eine grosse
+ Bibliothek von Spielen. Leider ist es nicht Open-Source.
+ </item>
+
+ <item><a href="http://www.kurnik.pl/">Kurnik</a> ist eine polnische
+ Spielseite mit verschiedenen Spielen.</item>
+
+ <item><a href="http://abstractstrategy.com/main.html">Abstract
+ Strategy Games</a> erlaubt es, strategische Spiele zu lernen
+ und zu spielen.
+ </item>
+
+ <item><a href="http://www.yourturnmyturn.com/">Your Turn My
+ Turn</a> erlaubt es, Brettspiele online zu spielen.</item>
+ </itemize>
+ </section>
+ <section title="Linki do Programów do Gier" lang="pl">
<itemize>
+ <item><a href="http://www.apronus.com/chess/wbeditor.php">Apronus Chess
+ Board Editor</a> to nasz ulubiony prosty edytor pozycji szachowych.
+ </item>
+
+ <item><a href="http://www.dozingcatsoftware.com/Gridlock/">Gridlock</a>
+ to zbiór gier planszowych open-source. Miło z nim grać, ale nie
+ pozwala edytować gry ani stanu planszy.
+ </item>
+
+ <item><a href="http://www.zillions-of-games.com/">Zillions of Games</a>
+ to język do definicji gier wraz z symulatorem i pokaźną biblioteką
+ przeróżnych gier. Niestety, nie jest to program open-source.
+ </item>
+
+ <item><a href="http://www.kurnik.pl/">Kurnik</a> to polska strona
+ na której można grać w różne gry planszowe i karciane.</item>
+
+ <item><a href="http://abstractstrategy.com/main.html">Abstract
+ Strategy Games</a> pozwala uczyć się i grać w gry strategiczne.
+ </item>
+
+ <item>Na <a href="http://www.yourturnmyturn.com/">Your Turn My
+ Turn</a> możesz zagrać w różne gry planszowe.</item>
+ </itemize>
+ </section>
+
+
+ <section title="Modelling Links" lang="en">
+ <itemize>
<item><a href="http://edu.kde.org/step/">Step</a>
is an open-source physics simulator, a part of the KDE Education
Project. It can be used for simulation of systems with continuous
@@ -110,15 +165,47 @@
embedded systems. This advanced project allows to use various models
of computation that govern the interactions between components.
</item>
+ </itemize>
+ </section>
+ <section title="Links zu Simulation- und Modellierungprogrammen" lang="de">
+ <itemize>
+ <item><a href="http://edu.kde.org/step/">Step</a>
+ ist ein Open-Source Physiksimulator, teil der KDE Education Project.
+ Man kann damit Systeme mit kontiuerlicher Dynamik simulieren.
+ </item>
- <item><a href="http://www.microsoft.com/esp/about_esp/overview.htm"
- >Microsoft ESP</a> is a visual simulation platform
- that applies game-based technology to some more complex problems.
+ <item><a href="http://www.iseesystems.com/softwares/Education/StellaSoftware.aspx">STELLA</a> ist ein kommerzieller Simulationsprogramm und erlaubt
+ sowohl diskrete als auch kontinuerliche Dynamik.
</item>
+
+ <item><a href="http://ptolemy.eecs.berkeley.edu/">Ptolemy</a> Projekt
+ erforscht Modelierung, Simulation und das Design von Nebenläufigen im
+ Echtzeit laufenden eingebeteten Systeme. Es erlaubt verschiedene
+ Modelle von Berechnungen gleichzeitig zu verknüpfen und zu nutzen.
+ </item>
</itemize>
</section>
+ <section title="Linki do Programów do Modelowania" lang="pl">
+ <itemize>
+ <item><a href="http://edu.kde.org/step/">Step</a> to open-sourcowy
+ symulator fizyki, część KDE Education Project. Pozwala na
+ symulację systemów z ciągłą dynamiką.
+ </item>
- <section title="Team">
+ <item><a href="http://www.iseesystems.com/softwares/Education/StellaSoftware.aspx">STELLA</a> to komercyjny symulator pozwalający definiować zarówno
+ ciągłą jak i dyskretną dynamikę.
+ </item>
+
+ <item><a href="http://ptolemy.eecs.berkeley.edu/">Ptolemy</a> to projekt
+ w którym badane jest modelowanie, symulacja i design równoległych
+ systemów czasu rzeczywistego. Ten zaawansowany projekt pozwala łączyć
+ różne modele obliczeń i używać ich w tym samym projekcie.
+ </item>
+ </itemize>
+ </section>
+
+
+ <section title="Team" lang="en">
<par>Toss originates from our work in the
<a href="http://www.algosyn.rwth-aachen.de/">AlgoSyn</a> research group.
Many people contributed, here we name just a few. Current leaders:</par>
@@ -143,4 +230,56 @@
</itemize>
</section>
+ <section title="Team" lang="de">
+ <par>Toss hat angefangen während der Arbeit im
+ <a href="http://www.algosyn.rwth-aachen.de/">AlgoSyn</a>
+ Graduiertenkolleg. Viele haben dazu beigetragen, hier benennen wir
+ nur einige Mitwirkende. Zur Zeit programmieren am meisten:</par>
+ <itemize>
+ <item>Łukasz Kaiser (<mailto address="luk...@gm..."/>)</item>
+ <item>Tobias Ganzow</item>
+ <item>Łukasz Stafiniak</item>
+ <item>Michał Wójcik</item>
+ </itemize>
+
+ <par>Freunde die uns sehr geholfen haben.</par>
+ <itemize>
+ <item>Dietmar Berwanger</item>
+ <item>Matko Botincan</item>
+ <item>Diana Fischer</item>
+ </itemize>
+ <par>Einige andere Mitarbeiter haben an der ältesten Version von
+ Toss (ca. 2004) gearbeitet.</par>
+ <itemize>
+ <item>Alexander Kharitonov</item>
+ <item>Peter Cholewinski</item>
+ </itemize>
+ </section>
+
+ <section title="Team" lang="pl">
+ <par>Toss wywodzi się z prac i dyskusji w gronie
+ <a href="http://www.algosyn.rwth-aachen.de/">AlgoSyn</a>.
+ Wiele osób pracowało nad Tossem w różnych okresach, tutaj
+ wymieniamy tylko niektóre z nich. Obecnie najwięcej pracują:</par>
+ <itemize>
+ <item>Łukasz Kaiser (<mailto address="luk...@gm..."/>)</item>
+ <item>Tobias Ganzow</item>
+ <item>Łukasz Stafiniak</item>
+ <item>Michał Wójcik</item>
+ </itemize>
+
+ <par>Przyjaciele, którzy bardzo nam pomogli.</par>
+ <itemize>
+ <item>Dietmar Berwanger</item>
+ <item>Matko Botincan</item>
+ <item>Diana Fischer</item>
+ </itemize>
+ <par>Inna grupa osób pracowała nad najstarszą wersją Tossa
+ (około 2004).</par>
+ <itemize>
+ <item>Alexander Kharitonov</item>
+ <item>Peter Cholewinski</item>
+ </itemize>
+ </section>
+
</personal>
Modified: trunk/Toss/www/develop.xml
===================================================================
--- trunk/Toss/www/develop.xml 2011-03-14 11:11:08 UTC (rev 1359)
+++ trunk/Toss/www/develop.xml 2011-03-15 00:46:12 UTC (rev 1360)
@@ -39,63 +39,63 @@
</section>
<section title="Vorbereitung" lang="de">
<itemize>
- <item>Except for the interfaces, most of Toss is programmed in
- <a href="http://caml.inria.fr/">Objective Caml</a>. You will need
- a good understanding of OCaml and a full OCaml installation
- to work on the Toss Engine.
+ <item>Ausser der Interfaces ist Toss fast vollständig in
+ <a href="http://caml.inria.fr/">Objective Caml</a> geschrieben.
+ Um an Toss zu arbeiten braucht man ein gutes Verständnis von
+ OCaml und eine vollständige OCaml Installation.
</item>
- <item>Toss <em>build system</em> is based on <em>ocamlbuild</em>
- and uses <em>Makefiles</em> for compilation of the C parts.
- You will need a system which supports these to build Toss.
+ <item>Das <em>Build System</em> von Toss basiert auf <em>ocamlbuild</em>
+ und nutzt <em>Makefiles</em> um die C Teile zu kompilieren.
+ Man muss diese Tools installiert haben um Toss zu bauen.
</item>
- <item>If you want to develop Toss on Ubuntu, here is a command with
- a list of packages to install.<br/>
+ <item>Wenn man Toss unter Ubuntu kompilieren möchte, braucht man
+ Pakette, die mit folgender Zeile installiert werden können.<br/>
sudo apt-get install g++ python-qt4 python-dev pyqt4-dev-tools
ocaml-findlib menhir libounit-ocaml-dev libapache2-mod-python
sqlite3 python-pysqlite2
</item>
- <item>This command will checkout the
+ <item>Folgendes nutzt man, um die
<a href="http://toss.svn.sourceforge.net/viewvc/toss/trunk/Toss/">Toss
- SVN Repository</a> to the <em>Toss</em> directory.<br/>
+ SVN Repository</a> zum <em>Toss</em> Verzeichnis auszuchecken.<br/>
svn co https://toss.svn.sourceforge.net/svnroot/toss/trunk/Toss Toss
</item>
- <item>In the Toss directory run <em>make</em> and check that
- it succeeds.</item>
+ <item>Im Toss Verzeichnis führe <em>make</em> aus und überprüfe,
+ dass es erfolgreich funktioniert hat.</item>
</itemize>
</section>
<section title="Przygotowanie" lang="pl">
<itemize>
- <item>Except for the interfaces, most of Toss is programmed in
- <a href="http://caml.inria.fr/">Objective Caml</a>. You will need
- a good understanding of OCaml and a full OCaml installation
- to work on the Toss Engine.
+ <item>Poza interfejsami większość Tossa jest napisana w
+ <a href="http://caml.inria.fr/">Objective Camlu</a>. Aby pracować
+ nad Enginem Tossa niezbędna jest dobra znajomosc OCamla oraz
+ jego pełna instalacja.
</item>
- <item>Toss <em>build system</em> is based on <em>ocamlbuild</em>
- and uses <em>Makefiles</em> for compilation of the C parts.
- You will need a system which supports these to build Toss.
+ <item><em>Build system</em> Tossa bazuje na <em>ocamlbuild</em>,
+ ale <em>Makefile</em> są używane do kompilacji niektórych części,
+ np. kodu C. Trzeba zainstalowac te programy żeby skompilować Tossa.
</item>
- <item>If you want to develop Toss on Ubuntu, here is a command with
- a list of packages to install.<br/>
+ <item>Pod Ubuntu, poniższe polecenie zainstaluje pakiety niezbędne
+ do kompilacji Tossa.<br/>
sudo apt-get install g++ python-qt4 python-dev pyqt4-dev-tools
ocaml-findlib menhir libounit-ocaml-dev libapache2-mod-python
sqlite3 python-pysqlite2
</item>
- <item>This command will checkout the
- <a href="http://toss.svn.sourceforge.net/viewvc/toss/trunk/Toss/">Toss
- SVN Repository</a> to the <em>Toss</em> directory.<br/>
+ <item>Poniższe polecenie ściągnie
+ <a href="http://toss.svn.sourceforge.net/viewvc/toss/trunk/Toss/">
+ Repozytorium SVN Tossa</a> do katalogu <em>Toss</em>.<br/>
svn co https://toss.svn.sourceforge.net/svnroot/toss/trunk/Toss Toss
</item>
- <item>In the Toss directory run <em>make</em> and check that
- it succeeds.</item>
+ <item>W katalogu Toss uruchom <em>make</em> i sprawdź czy dobrze
+ zadziałało.</item>
</itemize>
</section>
- <section title="Understanding Toss">
+ <section title="Understanding Toss" lang="en">
<itemize>
<item><a href="create.html">Create</a> at least one simple game
to get started.</item>
- <item>Get acquainted with <a href="docs.html">Toss documentation</a>.
+ <item>Get acquainted with the <a href="docs.html">Toss documentation</a>.
</item>
<item>Do not forget to read the <a href="reference/reference.pdf">
reference.pdf</a> document.</item>
@@ -105,8 +105,37 @@
about Toss to get an idea where the ideas come from.</item>
</itemize>
</section>
+ <section title="Toss Verstehen" lang="de">
+ <itemize>
+ <item><a href="create.html">Erzeuge</a> wenigstens ein einfaches Spiel
+ mit Toss um die Grundlagen zu verstehen.</item>
+ <item>Lese die <a href="docs.html">Dokumentation</a> von Toss.
+ </item>
+ <item>Vergesse nicht die <a href="reference/reference.pdf">
+ Reference.pdf</a> durchzublättern.</item>
+ <item>Wenn man Toss programmiert, ist die
+ <a href="code_doc/">Quellcode Dokumentation</a> oft nützlich.</item>
+ <item>Durch die <a href="Publications/">Papers und Talks</a> kann man
+ verstehen, woher die Ideen hinter Toss kommen.</item>
+ </itemize>
+ </section>
+ <section title="Zrozumieć Tossa" lang="pl">
+ <itemize>
+ <item><a href="create.html">Stwórz</a> przynajmniej jedną prostą
+ grę w Tossie na początek.</item>
+ <item>Zapoznaj się z <a href="docs.html">dokumentacją Tossa</a>.
+ </item>
+ <item>Przejrzyj też <a href="reference/reference.pdf">
+ reference.pdf</a>.</item>
+ <item>Podczas programowania poręczna jest
+ <a href="code_doc/">dokumentacja kodu</a>.</item>
+ <item>Oglądając <a href="Publications/">prace i referaty</a>
+ można dowiedzieć się, skąd czerpaliśmy pomysły w Tossie.</item>
+ </itemize>
+ </section>
- <section title="Working with the Toss Team">
+
+ <section title="Working with the Toss Team" lang="en">
<par>If you have an idea for Toss, a request, want to become a developer
or just want to talk, contact us! Most engaged Toss developers do
respond to Toss questions on their private emails every
@@ -122,5 +151,39 @@
<mailto address="mic...@gm..."/></item>
</itemize>
</section>
+ <section title="Mit Toss Team Zusammenarbeiten" lang="de">
+ <par>Wenn du eine Idee für Toss hast, ein Vorschlag, eine Anfrage,
+ wenn du Toss programmieren möchtest oder einfach mit uns reden,
+ schreibe uns! Die angagiertesten Toss Developer beantworten
+ täglich Fragen über Toss auch auf privaten Emails (unten), aber es ist
+ am besten an <em>toss-devel</em> zu schreiben.</par>
+ <itemize>
+ <item>Toss Mailingliste:
+ <mailto address="tos...@li..."/></item>
+ <item>Łukasz Kaiser:
+ <mailto address="luk...@gm..."/></item>
+ <item>Łukasz Stafiniak:
+ <mailto address="luk...@gm..."/></item>
+ <item>Michał Wójcik:
+ <mailto address="mic...@gm..."/></item>
+ </itemize>
+ </section>
+ <section title="Praca z Nami" lang="pl">
+ <par>Jeśli masz pomysł na zmiany w Tossie, prośbę o poprawienie buga,
+ chcesz zostać developerem Tossa albo po prostu z nami porozmawiac,
+ napisz! Najbardziej zaangażowani programiści Tossa odpowiadają
+ codziennie na maile nawet na swoich prywatnych adresach (poniżej),
+ ale najlepiej napisać na listę <em>toss-devel</em>.</par>
+ <itemize>
+ <item>Lista mailingowa Tossa:
+ <mailto address="tos...@li..."/></item>
+ <item>Łukasz Kaiser:
+ <mailto address="luk...@gm..."/></item>
+ <item>Łukasz Stafiniak:
+ <mailto address="luk...@gm..."/></item>
+ <item>Michał Wójcik:
+ <mailto address="mic...@gm..."/></item>
+ </itemize>
+ </section>
</personal>
Modified: trunk/Toss/www/reference/Makefile
===================================================================
--- trunk/Toss/www/reference/Makefile 2011-03-14 11:11:08 UTC (rev 1359)
+++ trunk/Toss/www/reference/Makefile 2011-03-15 00:46:12 UTC (rev 1360)
@@ -16,6 +16,8 @@
cp reference.html index.html
cp reference.html index.html.en
cp reference.html index.html.de
+ cp reference.html index.html.pl
+ cp reference.html index.html.fr
.PHONY:
Modified: trunk/Toss/www/reference/reference.bib
===================================================================
--- trunk/Toss/www/reference/reference.bib 2011-03-14 11:11:08 UTC (rev 1359)
+++ trunk/Toss/www/reference/reference.bib 2011-03-15 00:46:12 UTC (rev 1360)
@@ -1,3 +1,12 @@
+@inproceedings{GK10,
+ author = {T.~Ganzow and {\L}.~Kaiser},
+ title = {New Algorithm for Weak Monadic Second-Order Logic on Inductive Structures},
+ booktitle = {Proc.~of CSL'10},
+ publisher = {Springer},
+ series = {LNCS},
+ year = {2010},
+}
+
@article{SUB96,
author = {Marcos Salganicoff and Lyle H. Ungar and Ruzena Bajcsy},
title = {Active Learning for Vision-Based Robot Grasping},
Modified: trunk/Toss/www/reference/reference.tex
===================================================================
--- trunk/Toss/www/reference/reference.tex 2011-03-14 11:11:08 UTC (rev 1359)
+++ trunk/Toss/www/reference/reference.tex 2011-03-15 00:46:12 UTC (rev 1360)
@@ -27,6 +27,29 @@
\@abbrev{sf}{\mathsf}{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz}
\makeatother
+\usepackage[ruled]{algorithm2e}
+% tweak algorithm environment...
+\makeatletter
+%% at the end of algocf or figure environment
+\renewcommand{\@algocf@finish}{%
+ \@algoinsideskip%
+ \egroup%end of vtop which contain all the text
+ \hfill\egroup%end of hbox wich contains [margin][vtop]
+ \ifthenelse{\boolean{algocf@slide}}{\DecMargin{\skipalgocfslide}}{}%
+ %
+ \egroup%end of main vbox
+ \end{lrbox}%
+ \algocf@makethealgo% print the algo
+% \@algoskip%
+ \vskip-0.5em%
+ % restore dimension and macros
+ \setlength{\hsize}{\algowidth}%
+ \lineskip\normallineskip\setlength{\skiptotal}{\@defaultskiptotal}%
+ \let\;=\@mathsemicolon%
+}%
+\makeatother
+
+
% Simple item labels
\renewcommand{\labelitemi}{--}
\renewcommand{\labelitemii}{--}
@@ -49,7 +72,36 @@
\newcommand{\ol}[1]{\overline{#1}}
\renewcommand{\phi}{\varphi}
+% Formula forms and properties, boolean junctors
+\newcommand{\Lor}{\bigvee}
+\newcommand{\Land}{\bigwedge}
+\newcommand{\BC}{\calB^+}
+\newcommand{\CNF}{\ensuremath{\text{CNF}}\xspace}
+\newcommand{\procCNF}{\ensuremath{\mathtt{CNF}}\xspace}
+\newcommand{\DNF}{\ensuremath{\text{DNF}}\xspace}
+\newcommand{\procDNF}{\ensuremath{\mathtt{DNF}}\xspace}
+\newcommand{\TNF}{\ensuremath{\mathtt{TNF}}\xspace}
+\DeclareMathOperator{\qr}{qr}
+\DeclareMathOperator{\free}{free}
+\newcommand{\fv}{\ensuremath{\mathtt{FreeVar}}\xspace}
+\newcommand{\rank}{\ensuremath{\mathtt{rank}}\xspace}
+\newcommand{\hitrank}{\ensuremath{\mathtt{hit}\text{-}\mathtt{rank}}\xspace}
+% Theorem environments
+\theoremstyle{plain}
+\newtheorem{theorem}{Theorem}
+\newtheorem{proposition}[theorem]{Proposition}
+\newtheorem{corollary}[theorem]{Corollary}
+\newtheorem{lemma}[theorem]{Lemma}
+
+\theoremstyle{definition}
+\newtheorem{example}[theorem]{Example}
+\newtheorem{claim}[theorem]{Claim}
+\newtheorem{definition}[theorem]{Definition}
+
+% Rotated symbols
+\newcommand\rotleadsto{\rotatebox{-90}{$\leadsto$}}
+
% Start
\newcommand\thetitle{Toss Design and Specification}
\title{\thetitle}
@@ -60,7 +112,7 @@
\maketitle
-\setcounter{tocdepth}{1}
+\setcounter{tocdepth}{2}
\tableofcontents
\clearpage
@@ -488,7 +540,7 @@
\chapter{Algorithms}
-\section{Game Playing Algorithm}
+\section{UCT Game Playing Algorithm}
When playing a game, players need to decide what their next move is.
To represent the preferences of each player, or rather her expectations
@@ -684,8 +736,360 @@
The play in this iteration continues from one of those children,
as depicted by the snaked line in Figure~\ref{fig-ttt-eval-uct}.
-\section{Solver}
+\section{Type Normal Form}
+To derive evaluation heuristics from payoff terms, we first have to introduce
+a normal form of formulas which we exploit later in the construction. This
+normal form is in a sense a converse to the prenex normal form (PNF), because
+the quantifiers are pushed as deep inside the formula as possible. A very
+similar normal form has been used recently in a different
+context \cite{GK10}. For a set of formulas $\Phi$ let us denote by
+$\BC(\Phi)$ all positive Boolean combinations of formulas from $\Phi$,
+\ie define $\BC(\Phi) \ = \
+ \Phi \mid \BC(\Phi) \lor \BC(\Phi) \mid \BC(\Phi) \land \BC(\Phi)$.
+
+\begin{definition}
+A formula is in TNF if and only if it is a positive Boolean combination
+of formulas of the following form
+\begin{align*}
+ \tau &= R_i(\ol{x}) \mid \neg R_i(\ol{x}) \mid x = y \mid x \neq y \mid
+ \exists x \BC(\tau) \mid \forall x \BC(\tau)
+\end{align*}
+satisfying the following crucial constraint: in
+$\exists x \, \BC(\{\tau_i\})$ and $\forall x \, \BC(\{\tau_i\})$
+the free variables of \emph{each} $\tau_i$
+appearing in the Boolean combination \emph{must contain} $x$.
+\end{definition}
+
+We claim that for each formula $\phi$ there exists an equivalent
+formula $\psi$ in TNF, and the procedure \texttt{TNF}$(\phi)$ computes
+$\psi$ given $\phi$ in negation normal form. Note that it uses sub-procedures
+$\procDNF$ and $\procCNF$ which, given a Boolean combination of formulas,
+convert it to disjunctive or respectively conjunctive normal form.
+
+As an example, consider $\phi=\exists x \big( P(x) \land (Q(y)\lor R(x)) \big)$;
+This formula is not in TNF as $Q(y)$ appears under $\exists x$, and
+\texttt{TNF}$(\phi) = \big( Q(y) \land \exists x P(x) \big) \lor
+ \exists x \big( P(x) \land R(x) \big)$.
+
+%\newcommand{\algoskip}{\vspace{0.5em}}
+%\SetAlgoSkip{algoskip}
+\begin{procedure}[h]
+\caption{TNF($\phi$)}
+\label{alg-tnf}
+\lCase{$\phi$ is a literal}{\Return $\phi$}\;
+\lCase{$\phi = \phi_1 \lor \phi_2$}
+ {\Return $\TNF(\phi_1) \lor \TNF(\phi_2)$}\;
+\lCase{$\phi = \phi_1 \land \phi_2$}
+ {\Return $\TNF(\phi_1) \land \TNF(\phi_2)$}\;
+\uCase{$\phi = \exists x \psi$}
+ {Let $\procDNF(\TNF(\psi)) = \Lor_i(\Land_j \psi^i_j)$\\
+ and $F_i = \{j \mid x \in \free(\psi^i_j)\}$;\\
+ \Return $\Lor_i\Big(\Land_{j \not\in F_i} \psi^i_j \land
+ \exists x (\Land_{j \in F_i} \psi^i_j)\Big)$\;}
+\uCase{$\phi = \forall x \psi$}
+ {Let $\procCNF(\TNF(\psi)) = \Land_i(\Lor_j \psi^i_j)$\\
+ and $F_i = \{j \mid x \in \free(\psi^i_j)\}$;\\
+ \Return $\Land_i\Big(\Lor_{j \not\in F_i} \psi^i_j \lor
+ \forall x (\Lor_{j \in F_i} \psi^i_j)\Big)$\;}
+\end{procedure}
+
+
+\begin{theorem} \label{thm-tnf}
+$\TNF(\phi)$ is equivalent to $\phi$ and in TNF.
+\end{theorem}
+
+%\begin{proof}
+% WARNING !!! REPLACE J by F !!!
+%We proceed inductively on the structure of $\phi$. For literals all the claims
+%are trivial since $\TNF$ is an identity. For Boolean combinations of formulas,
+%the procedure $\TNF$ only calls itself recursively,
+%thus all claims of the theorem follow inductively as well.
+%
+%Consider the case when $\phi = \exists x \psi$ and
+%$\procDNF(\TNF(\psi)) = \Lor_i(\Land_j \psi^i_j)$.
+%We convert $\TNF(\psi)$ to disjunctive normal form in this case
+%since the existential quantifier is distributive over disjunction,
+%and thus $\TNF(\phi) \equiv \Lor_i(\exists x \Land_j(\psi^i_j))$.
+%Since quantifiers are also distributive over formulas which
+%do not contain the quantified variable, we get that the result,
+%$\Lor_i\Big(\Land_{j \in J_i} \psi^i_j \land
+% \exists x (\Land_{j \not\in J_i} \psi^i_j)\Big)$, is equivalent
+%to $\exists x \TNF(\psi)$, and thus by inductive hypothesis also to $\phi$.
+%Since each formula $\psi^i_j$ is, by inductive hypothesis, in the form $\tau$,
+%to show that the result is in TNF we only need to check that
+%$\exists x (\Land_{j \in J_i} \psi^i_j)$ is in the form $\tau$.
+%Syntactically this is trivial, and the constraint on variables in the TNF
+%is indeed satisfied by the choice of $J_i$. The set of atoms does not increase
+%by inductive hypothesis, and no new free variables appear by the choice of
+%$J_i$ Furthermore, neither the quantifier rank nor the rank over
+%any restricted variable increases.
+%The case of universal quantification is analogous,
+%modulo conversions between disjunctive and conjunctive normal forms
+%(we assume that \procCNF and \procDNF do not create new atoms).
+%\qed
+%\end{proof}
+
+The proof of the above theorem is a simple argument by induction on
+the structure of the formula, so we omit it here. Instead, let us give an
+example which explains why it is useful to compute TNF for the goal formulas.
+
+\begin{example}
+As already defined above, the payoff in Tic-tac-toe is given by
+$\exists x,y,z (P(x) \land P(y) \land P(z) \land L(x, y, z))$. To simplify this
+example, let us consider the payoff given only by row and column triples, \ie
+\begin{align*}
+\phi = \exists x,y,z \big( & P(x) \land P(y) \land P(z) \land \\
+ & \big( (R(x,y) \land R(y, z)) \lor (C(x, y) \land C(y, z)) \big) \big).
+\end{align*}
+This formula is not in TNF and the DNF of the quantified part has the form
+$\phi_1 \lor \phi_2$, where
+\[ \phi_1 = P(x) \land P(y) \land P(z) \land R(x, y) \land R(y, z), \]
+\[ \phi_2 = P(x) \land P(y) \land P(z) \land C(x, y) \land C(y, z). \]
+The procedure \texttt{TNF} must now choose the variable to first split on
+(this is discussed in the next section) and pushes the quantifiers inside,
+resulting in $\TNF(\phi) = \psi_1 \lor \psi_2$ with
+\[ \psi_1 = \exists x \big( P(x) \land \exists y \big( P(y) \land R(x, y)
+ \land \exists z (P(z) \land R(y, z)) \big) \big), \]
+\[ \psi_2 = \exists x \big( P(x) \land \exists y \big( P(y) \land C(x, y)
+ \land \exists z (P(z) \land C(y, z)) \big) \big). \]
+In spirit, the TNF formula is thus more ``step-by-step'' than the goal
+formula we started with, and we exploit this to generate heuristics
+for evaluating positions below.
+\end{example}
+
+
+\section{Heuristics from Existential Formulas}
+
+In this section, we present one method to generate a heuristic from
+an existential goal formula. As a first important step, we divide all
+relations appearing in the signature in our game into two sorts,
+\emph{fluents} and \emph{stable relations}. A relation is called \emph{stable}
+if it is not changed by any of the structure rewriting rules which appear
+as possible moves, all other relations are \emph{fluent}. We detect
+stable relations by a simple syntactic analysis of structure rewriting rules,
+\ie we check which relations from the left-hand side remain unchanged
+on the right-hand side of the rule. It is a big advantage of our formalism
+in comparison to GDL that stable relations (such as row and column relations
+used to represent the board) can so easily be separated from the fluents.
+
+After detecting the fluents, our first step in generating the heuristic
+is to compute the TNF of the goal formula. As mentioned in the example
+above, there is certain freedom in the \texttt{TNF} procedure as to
+which quantified variable is to be resolved first. We use fluents to decide
+this --- a variable which appears in a fluent will be resolved before
+all other variables which do not appear in any fluent literal
+(we choose arbitrarily in the remaining cases).
+
+After the TNF has been computed, we change each sequence of existential
+quantifiers over conjunctions into a sum, counting how many
+steps towards satisfying the whole conjunction have been made. Let us
+fix a factor $\alpha < 1$ which we will discuss later. Our algorithm then
+changes a formula in the following way.
+\[ \exists x_1 \big( \vartheta_1(x_1) \land
+ \exists x_2 \big( \vartheta_1(x_2, x_1) \land \cdots \land
+ \exists x_n \big( \vartheta_n(x_n, \ol{x_i}) \big) \cdots \big) \big)
+\]
+
+\vskip -2em
+
+\[ \rotleadsto \]
+\[ \sum_{x_1 \mid \vartheta_1(x_1)} \!\! \big( \alpha^{n-1} + \!\!\!
+ \sum_{x_2 \mid \vartheta_2(x_2, x_1)} \!\! ( \alpha^{n-2} + \, \cdots ( \alpha \,
+ + \!\!\! \sum_{x_n \mid \vartheta_n(x_n, \ol{x_i})} \!\!\! 1 ) \cdots ) \big) \]
+
+The sub-formulas $\vartheta_i(x_i, \ol{x})$ are in this case conjunctions
+of literals or formulas which contain universal quantifiers. The factor
+$\alpha$ defines how much more making each next step is valued over
+the previous one. %we call $\frac 1 \alpha$ the \emph{advancement factor}.
+When a formula contains disjunctions, we use the above schema recursively
+and sum the terms generated for each disjunct.
+
+To compute a heuristic for evaluating positions from a payoff term,
+which is a real-valued expression in the logic defined above, we simply
+substitute all characteristic functions, \ie expressions of the form
+$\chi[\phi]$, by the sum generated for $\phi$ as described above.
+
+\begin{example}
+Consider the TNF of the simplified goal formula for Tic-tac-toe presented
+in the previous example and let $\alpha = \frac 1 4$.
+Since the TNF of the goal formula for one player has
+the form $\psi_1 \lor \psi_2$, we generate the following sums:
+\[ s_1 = \sum_{x \mid P(x)} \big( {\frac 1 8} + \sum_{y \mid P(y) \land R(x, y)} (
+ {\frac 1 4} + \sum_{z \mid P(z) \land R(y, z)} 1) \big), \]
+\[ s_2 = \sum_{x \mid P(x)} \big( {\frac 1 8} + \sum_{y \mid P(y) \land C(x, y)} (
+ {\frac 1 4} + \sum_{z \mid P(z) \land C(y, z)} 1) \big). \]
+Since the payoff is defined by $\chi[\phi] - \chi[\phi']$, where $\phi'$ is
+the goal formula for the other player, \ie with $Q$ in place of $P$,
+the total generated heuristic has the form
+\[ s_1 + s_2 - s'_1 - s'_2, \]
+where $s_1'$ and $s_2'$ are as $s_1$ and $s_2$ but with $P$ replaced by $Q$.
+\end{example}
+
+
+\section{Finding Existential Descriptions}
+
+The method described above is effective if the TNF of the goal formulas
+has a rich structure of existential quantifiers. But this is not always
+the case, \eg in Breakthrough the goal formula for white has the form
+$\exists x \, (W(x) \land \neg \exists y \, C(x, y))$, because
+$\neg \exists y \, C(x, y)$ describes the last row which the player is
+supposed to reach. The general question which presents itself in this
+case is how, given an arbitrary relation $R(\ol{x})$ (as the last row above),
+can one construct an existential formula describing this relation.
+In this section, we present one method which turned out to yield useful
+formulas at least for common board games.
+
+First of all, let us remark that the construction we present will be
+done only for relations defined by formulas which do not contain fluents.
+Thus, we can assume that the relation does not change during the game and
+we use the starting structure in the construction of the existential formula.
+
+Our construction keeps a set $C$ of conjunctions of stable literals.
+We say that a subset $\{ \phi_1, \ldots, \phi_n \} \subseteq C$ \emph{describes}
+a relation $Q(\ol{x})$ in $\frakA$ if and only if $Q$ is equivalent
+in $\frakA$ to the existentially quantified disjunction of $\phi_i$'s, \ie if
+\[ \frakA \models Q(\ol{x}) \iff
+ \frakA \models \Lor_i\big( \exists \ol{y_i}\ \phi_i \big), \]
+where $\ol{y_i}$ are all free variables of $\phi_i$ except for $\ol{x}$.
+
+
+Our procedure extends the conjunctions from $C$ with new literals until
+a subset which describes $Q$ is found. These extensions can in principle
+be done in any order, but to obtain compact descriptions in reasonable
+time we perform them in a greedy fashion. The conjunctions are
+ordered by their hit-rank, defined as
+\[ \hitrank_{\frakA, Q(\ol{x})}(\phi) =
+ \frac{|\{ \ol{x} \in Q \mid \frakA \models \exists \ol{y} \phi(\ol{x}) \}|}
+ {|\{ \ol{x} \mid \frakA \models \exists \ol{y} \phi(\ol{x}) \}|}, \]
+where again $\ol{y} = \fv(\phi) \setminus \ol{x}$. Intuitively, the hit-rank is
+the ratio of the tuples from $Q$ which satisfy (existentially quantified) $\phi$
+to the number of all such tuples. Thus, the hit-rank is $1$ if $\phi$ describes
+$Q$ and we set the hit-rank to $0$ if $\phi$ is not satisfiable in $\frakA$.
+We define the $\rank_{\frakA, Q}(\phi, R(\ol{y}))$ as the maximum of
+the $\hitrank_{\frakA, Q}(\phi \land R(\ol{y}))$ and
+the $\hitrank_{\frakA, Q}(\phi \land \neg R(\ol{y}))$.
+The complete procedure is summarized below.
+
+%\renewcommand{\algoskip}{}%{\vspace{-1em}}
+%\SetAlgoSkip{algoskip}
+\begin{procedure}[h]
+\caption{ExistentialDescription($\frakA$, $Q$)}
+\label{alg-exd}
+$C \longleftarrow \{ \top \}$\\
+\While{ no subset of $C$ describes $Q(\ol{x})$ in $\frakA$ }{
+ \For{a stable relation $R(\ol{y})$, conjunction $\phi \in C$\\
+ $\ \quad$ with maximal $\rank_{\frakA, Q}(\phi, R(\ol{y}))$}{
+ %\lIf{($\fv(\phi) \cup \ol{x}) \cap \ol{y} = \emptyset$}{\Return}\\
+ $\quad C \longleftarrow (C \setminus \{ \phi \}) \cup
+ \{ \phi \land R(\ol{y}), \ \phi \land \neg R (\ol{y}) \}$
+ }
+}
+\end{procedure}
+
+Since it is not always possible to find an existential description
+of a relation, let us remark that we stop the procedure if no description with
+a fixed number of literals is found. We also use a tree-like data structure
+for $C$ to check the existence of a describing subset efficiently.
+
+\begin{example}
+As mentioned before, the last row on the board is defined by
+the relation $Q(x) = \neg \exists y \, C(x, y)$. Assume that we search
+for an existential description of this relation on a board with only
+the binary row and column relations ($R$ and $C$) being stable, as
+in Figure~\ref{fig-tic-tac-toe}. Since adding a row literal will
+not change the hit-rank, our construction will be adding column literals
+one after another and will finally arrive, on an $3 \times 3$ board,
+at the following existential description:
+$\exists y_1, y_2 ( C(y_1, y_2) \land C(y_2, x) )$.
+Using such formula, the heuristic constructed in the previous section
+can count the number of steps needed to reach the last row for each
+pawn, which is a important \eg in Breakthrough.
+\end{example}
+
+
+\section{Alternative Heuristics with Rule Conditions}
+
+The algorithm presented above is only one method to derive heuristics, and it
+uses only the payoff terms. In this section we present an alternative method,
+which is simpler and uses also the rewriting rules and their constraints.
+This simpler technique yields good heuristics only for games in which moves
+are monotone and relatively free, \eg for Connect5. %(also known as Gomoku).
+%We view this alternative heuristics as an example of other possibilities
+%to exploit, which we discuss more thouroughly in the last section.
+
+Existential formulas are again the preferred input for the procedure, but this
+time we put them in prenex normal form at the start. As before, all universally
+quantified formulas are either treated as atomic relations or expanded,
+as discussed above. The Boolean combination under the existential
+quantifiers is then put in DNF and, in each conjunction in the DNF,
+we separate fluents from stable relations. After such preprocessing,
+the formula has the following form:
+\[ \exists \ol{x} \, \big(
+ (\vartheta_1(\ol{x}) \land \psi_1(\ol{x})) \, \lor \, \cdots \, \lor \,
+ (\vartheta_n(\ol{x}) \land \psi_n(\ol{x})) \big), \]
+where each $\vartheta_i(\ol{x})$ is a conjunction of fluents and
+each $\psi_i(\ol{x})$ is a conjunction of stable literals.
+
+To construct the heuristic, we will retain the stable sub-formulas
+$\psi_i(\ol{x})$ but change the fluent ones $\vartheta_i(\ol{x})$ from
+conjunctions to sums.
+Formally, if $\vartheta_i(\ol{x}) = F_1(\ol{x}) \land \cdots \land F_k(\ol{x})$
+then we define $s_i(\ol{x}) = \chi[F_1(\ol{x})] + \cdots + \chi[F_k(\ol{x})]$,
+and let $\delta_i(\ol{x}) = F_1(\ol{x}) \lor \cdots \lor F_k(\ol{x})$ be
+a formula checking if the sum $s_i(\ol{x}) > 0$. The guard for our heuristic
+is defined as \[ \gamma(\ol{x}) =
+ \big( \psi_1(\ol{x}) \, \lor \, \cdots\, \lor \, \psi_n(\ol{x}) \big) \ \land
+ \ \big( \delta_1(\ol{x}) \, \lor \, \cdots \, \lor \, \delta_n(\ol{x}) \big)
+\] and the heuristic with parameter $n$ by
+\[ \sum_{\ol{x} \mid \gamma(\ol{x}) \land \mathtt{move}(\ol{x})} \big(
+ s_1(\ol{x}) + \cdots + s_n(\ol{x}) \big)^n. \]
+
+The additional formula $\mathtt{move}(\ol{x})$ is used to guarantee,
+that at each element matched to one of the variables $\ol{x}$ it is
+still possible to make a move. This is done by converting the rewrite
+rule into a formula with free variables corresponding to the elements
+of the left-hand side structure, removing all the fluents $F_i$ from
+above if these appear negated, and quantifying existentially if a new
+variable (not in $\ol{x}$) is created in the process. The following
+example shows how the procedure is applied for Tic-tac-toe.
+
+\begin{example}
+For Tic-tac-toe simplified as before (no diagonals),
+the goal formula in PNF and DNF reads:
+\begin{align*}
+ \exists x,y,z \ \big( & \,
+ (P(x) \, \land \, P(y) \, \land \, P(z) \, \land \,
+ R(x, y) \, \land \, R(y, z)) \\
+ \lor & \, (P(x) \, \land \, P(y) \, \land \, P(z) \, \land \,
+ C(x, y) \, \land \, C(y, z)) \big).
+\end{align*}
+The resulting guard is thus, after simplification,
+\begin{align*}
+\gamma(x,y,z) = \big( & \,
+ (R(x, y) \, \land \, R(y, z))\, \lor\, (C(x, y) \, \land \, C(y, z)) \big)\\
+ \land & \, \big( P(x) \, \lor \, P(y) \, \lor \, P(z) \big).
+\end{align*}
+Since the structure rewriting rule for the move has only one element,
+say $u$, on its left-hand side, and $\tau_{\mr{e}} = \{P, Q\}$ for this rule,
+the formula for the left-hand side reads $l(u) = \neg P(u) \land \neg Q(u)$.
+Because $P$ appears as a fluent in $\gamma$ we remove all occurrences of
+$\neg P$ from $l$ and are then left with $\mathtt{move}(u) = \neg Q(u)$.
+Since we require that a move is possible from all variables, the derived
+heuristic for one player with power $4$ has the form
+\[ h \ \ = \!\!\!\! \!\!\!\! \!\!
+ \sum_{x, y, z \ \mid \ \gamma(x, y, z) \, \land \, \neg Q(x)
+ \, \land \, \neg Q(y) \, \land \, \neg Q(z)} \!\!\!\!\!\!
+ \!\!\!\!\!\! \!\!\!\!\!\! \!\!\!\!\!\! \!\!\!\!\!\! \!\!\!\!\!\!
+ (\chi[P(x)] + \chi[P(y)] + \chi[P(z)])^4. \]
+Since the payoff expression is $\chi[\phi] - \chi[\phi']$, where $\phi'$
+is the goal formula for the other player, we use $h - h'$ as the final
+heuristic to evaluate positions.
+\end{example}
+
+
+\section{Solver Techniques}
+
We used a SAT solver (MiniSAT) to operate on symbolic representations
of MSO variables. We decided in favor of CNF representation instead of
the more standard BDD approach as it seems to scale in a more consistent way.
@@ -695,32 +1099,82 @@
(cylindrical algebraic decomposition) but works very consistently
for many cases.
+The main formula optimization is just performing the TNF, later we
+only push predicates to the front.
+
+
\chapter{Design}
\section{Organization of Code}
-Toss consists of a \emph{Client} module handling visualization and
-a completely separate \emph{TossServer}. The communication is based
-on socket requests, see the \texttt{Arena.mli} file for complete
-specification of available server requests and response format.
+Toss consists of the main \emph{TossServer} which is built from several
+main modules explained in the sections below and corresponding to
+directories in the code tree. The main modules contain OCaml modules
+themselves. Toss additionally includes a few clients which provide
+the user interface to Toss. At present there is a python GUI client
+in \emph{Client} and a browser-based client in \emph{WebClient}.
+Communication between the Server and the clients relies on
+socket requests, see the \texttt{Arena.mli} file for complete
+specification of available server requests and the response format.
-\subsection{Server}
-Toss server code is split in two parts, \emph{Solver} and \emph{Games} code.
-The solver performs all functions related to structures, logic and constraint
-solving, while the game code stores rules and games and implements the game
-playing algorithm. The code is written in OCaml.
+\section{Formula}
+This most basic directory implements formulas as described above and various
+operations on formulas which are necessary for other modules. It also
+contains a parser for formulas and the lexing file used for all parsers.
+The MiniSAT solver is included in this directory as it is used for formula
+simplification.
-\subsection{Client}
-In general, it is possible to implement many Toss clients and there should
-be no problem for them to interact with the same server. At present, we have
-just one client which is written in python using the Qt4 library.
+\section{Solver}
+This directory contains the module which represents relational structures,
+and the full Solver, including the elimination-based solver for the theory
+of reals and the SAT-based solving algorithm for monadic second-order logic.
+\section{Arena}
+
+This directory contains modules which implement the game definition,
+including discrete and continuous structure rewriting, game file parser
+and client-server communication parser and request type.
+
+
+\section{Play}
+
+This directory contains modules responsible for automatic play, including
+the heuristic generation module, the abstract game tree module and its
+instantiations to Maximax and UCT.
+
+
+\section{GGP}
+
+This directory contains the code which translates GDL files into Toss
+format together with various needed simplifications. Multiple tests
+and a Java GGP Server are also included there to facilitate testing
+of the Toss-GGP code.
+
+
+\section{Server}
+
+In this directory we simply keep the implementation of TossServer
+together with several high-level tests to check that it works ok.
+
+
+\section{Client}
+
+This stand-alone Toss client is written in python using the Qt4 library.
+
+
+\section{WebClient}
+
+The browser-based client does not currently interface TossServer directly,
+but uses a python request Handler.py as an intermediate step. This handler
+also manages a database of users and games.
+
+
%% Bibliography
\bibliographystyle{plain}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|