# HG changeset patch # User Robert McIntyre # Date 1395379061 14400 # Node ID 6b0f77df0e53962b93dd853a6747bc1b868c371a # Parent c2c28c3e27c40327b65069eb32fb8ac0ff1dfa0f building latex scaffolding for thesis. diff -r c2c28c3e27c4 -r 6b0f77df0e53 .hgignore --- a/.hgignore Fri Mar 21 00:08:49 2014 -0400 +++ b/.hgignore Fri Mar 21 01:17:41 2014 -0400 @@ -15,7 +15,7 @@ libbulletjme.so java/build/* java/dist/* -thesis/tmp + syntax: regexp ^.*blend\d$ diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/Makefile --- a/thesis/Makefile Fri Mar 21 00:08:49 2014 -0400 +++ b/thesis/Makefile Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,10 @@ +all: + ./weave-thesis.sh + rsync -avz --delete /home/r/proj/cortex/thesis "r@aurellem.org:~" + ssh r@aurellem.org "cd ~/thesis; pdflatex thesis.tex; pdflatex thesis.tex" + scp "r@aurellem.org:/home/r/thesis/thesis.pdf" . + + + + + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/abstract.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/abstract.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,22 @@ +% $Log: abstract.tex,v $ +% Revision 1.1 93/05/14 14:56:25 starflt +% Initial revision +% +% Revision 1.1 90/05/04 10:41:01 lwvanels +% Initial revision +% +% +%% The text of your abstract and nothing else (other than comments) goes here. +%% It will be single-spaced and the rest of the text that is supposed to go on +%% the abstract page will be generated by the abstractpage environment. This +%% file should be \input (not \include 'd) from cover.tex. +In this thesis, I designed and implemented a compiler which performs +optimizations that reduce the number of low-level floating point operations +necessary for a specific task; this involves the optimization of chains of +floating point operations as well as the implementation of a ``fixed'' point +data type that allows some floating point operations to simulated with integer +arithmetic. The source language of the compiler is a subset of C, and the +destination language is assembly language for a micro-floating point CPU. An +instruction-level simulator of the CPU was written to allow testing of the +code. A series of test pieces of codes was compiled, both with and without +optimization, to determine how effective these optimizations were. diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/images/cat-drinking.jpg Binary file thesis/aux/images/cat-drinking.jpg has changed diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/images/finger-UV.png Binary file thesis/aux/images/finger-UV.png has changed diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/README.bibliography --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/README.bibliography Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,28 @@ +This file gives an overview on what you will need to do to create a +bibliographic database for references, as well as create the actual +bibliography for your thesis. + +You should not need to touch the file biblio.tex. This merely tells +latex to look for the file with the bibliographic info. The file you +want to edit is main.bib. For each entry, use the appropriate style +as designated in the file. + +Citing your references: + +When you cite a reference, you need to use the ``key'' you declare in +main.bib for the entry. No one ever sees the keys, but you'll want to +use something you will easily remember. For instance, if you had an +entry with: + + key=geer1 + +Then you would use \cite{geer1} to reference it within your thesis. + +NOTE: You can not include references in your bibliography that are +never cited in your paper by default. If you need to do this, create a +key for the entry and at the end of your thesis include the line: + +\nocite{key} + +This should be done for every entry which is not explicitly cited. + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/README.main --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/README.main Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,54 @@ +This file explains the options available to you for editting the file +main.tex. + +The commands in the this file allow you to specify options such as +spacing, double-sided printing, a draft copy, etc. By default, 12pt +and lgrind are included; lgrind is the 2e style for including code in +your thesis. + +\documentclass[12pt]{mitthesis} +\usepackage{lgrind} +\pagestyle{plain} + +You can add options in the documentclass line as follows: + + o singlespace + + \documentclass[12pt,singlespace]{mitthesis} + + o twoside + + \documentclass[12pt,twoside]{mitthesis} + + o draft (make sure to change the pagestyle to drafthead as + well) + + \documentclass[12pt,draft]{mitthesis} + \usepackage{lgrind} + \pagestyle{drafthead} + + o vi (for course vi and course viii theses) + + \documentclass[12pt,vi]{mitthesis} + +Any options you would use for report.sty will work here as well. + + +You should not need to change the first three lines and last two lines +below. Be sure to include an \include command for each file you are +including in your thesis. + +\include{cover} +\pagestyle{plain} +\include{contents} +\include{chap1} +\include{chap2} +\appendix +\include{appa} +\include{appb} +\include{biblio} +\end{document} + +Comment: to include appendices use a single \appendix command followed by +a number of \include{} commands as many files as needed, each of which +should contain a \chapter{} command for the appendix title. diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/README.text --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/README.text Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,34 @@ +This file includes the basic commands you will need to use within each +chapter of your thesis. + +The file chap1.tex is a sample first chapter. To get started, you may +just want to replace the text and commands in that file as needed. In +general though, for each new chapter you want to do the following: + + o Make sure the name has the extension .tex . Otherwise, you + can call it anything you want. For ease of use, all the + examples use chap1, chap2, etc. + + o Add a line to the file main.tex that reads: + + \include{yourfilename} + + This should not include the .tex extension, because latex + assumes that is there. + +Basic syntax: + + o The first line of each chapter should be: + + \chapter{Chapter Title} + + o To start a new section (labeled chap#.sec# -- as in 1.1, + 1.2, etc): + + \section{Section Heading} + + You can also include subsections: + + \subsection{Heading} + + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/abstract.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/abstract.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,22 @@ +% $Log: abstract.tex,v $ +% Revision 1.1 93/05/14 14:56:25 starflt +% Initial revision +% +% Revision 1.1 90/05/04 10:41:01 lwvanels +% Initial revision +% +% +%% The text of your abstract and nothing else (other than comments) goes here. +%% It will be single-spaced and the rest of the text that is supposed to go on +%% the abstract page will be generated by the abstractpage environment. This +%% file should be \input (not \include 'd) from cover.tex. +In this thesis, I designed and implemented a compiler which performs +optimizations that reduce the number of low-level floating point operations +necessary for a specific task; this involves the optimization of chains of +floating point operations as well as the implementation of a ``fixed'' point +data type that allows some floating point operations to simulated with integer +arithmetic. The source language of the compiler is a subset of C, and the +destination language is assembly language for a micro-floating point CPU. An +instruction-level simulator of the CPU was written to allow testing of the +code. A series of test pieces of codes was compiled, both with and without +optimization, to determine how effective these optimizations were. diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/biblio.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/biblio.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,8 @@ +%% This defines the bibliography file (main.bib) and the bibliography style. +%% If you want to create a bibliography file by hand, change the contents of +%% this file to a `thebibliography' environment. For more information +%% see section 4.3 of the LaTeX manual. +\begin{singlespace} +\bibliography{main} +\bibliographystyle{plain} +\end{singlespace} diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/chap1.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/chap1.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,250 @@ +%% This is an example first chapter. You should put chapter/appendix that you +%% write into a separate file, and add a line \include{yourfilename} to +%% main.tex, where `yourfilename.tex' is the name of the chapter/appendix file. +%% You can process specific files by typing their names in at the +%% \files= +%% prompt when you run the file main.tex through LaTeX. +\chapter{Introduction} + +Micro-optimization is a technique to reduce the overall operation count of +floating point operations. In a standard floating point unit, floating +point operations are fairly high level, such as ``multiply'' and ``add''; +in a micro floating point unit ($\mu$FPU), these have been broken down into +their constituent low-level floating point operations on the mantissas and +exponents of the floating point numbers. + +Chapter two describes the architecture of the $\mu$FPU unit, and the +motivations for the design decisions made. + +Chapter three describes the design of the compiler, as well as how the +optimizations discussed in section~\ref{ch1:opts} were implemented. + +Chapter four describes the purpose of test code that was compiled, and which +statistics were gathered by running it through the simulator. The purpose +is to measure what effect the micro-optimizations had, compared to +unoptimized code. Possible future expansions to the project are also +discussed. + +\section{Motivations for micro-optimization} + +The idea of micro-optimization is motivated by the recent trends in computer +architecture towards low-level parallelism and small, pipelineable +instruction sets \cite{patterson:risc,rad83}. By getting rid of more +complex instructions and concentrating on optimizing frequently used +instructions, substantial increases in performance were realized. + +Another important motivation was the trend towards placing more of the +burden of performance on the compiler. Many of the new architectures depend +on an intelligent, optimizing compiler in order to realize anywhere near +their peak performance +\cite{ellis:bulldog,pet87,coutant:precision-compilers}. In these cases, the +compiler not only is responsible for faithfully generating native code to +match the source language, but also must be aware of instruction latencies, +delayed branches, pipeline stages, and a multitude of other factors in order +to generate fast code \cite{gib86}. + +Taking these ideas one step further, it seems that the floating point +operations that are normally single, large instructions can be further broken +down into smaller, simpler, faster instructions, with more control in the +compiler and less in the hardware. This is the idea behind a +micro-optimizing FPU; break the floating point instructions down into their +basic components and use a small, fast implementation, with a large part of +the burden of hardware allocation and optimization shifted towards +compile-time. + +Along with the hardware speedups possible by using a $\mu$FPU, there are +also optimizations that the compiler can perform on the code that is +generated. In a normal sequence of floating point operations, there are +many hidden redundancies that can be eliminated by allowing the compiler to +control the floating point operations down to their lowest level. These +optimizations are described in detail in section~\ref{ch1:opts}. + +\section{Description of micro-optimization}\label{ch1:opts} + +In order to perform a sequence of floating point operations, a normal FPU +performs many redundant internal shifts and normalizations in the process of +performing a sequence of operations. However, if a compiler can +decompose the floating point operations it needs down to the lowest level, +it then can optimize away many of these redundant operations. + +If there is some additional hardware support specifically for +micro-optimization, there are additional optimizations that can be +performed. This hardware support entails extra ``guard bits'' on the +standard floating point formats, to allow several unnormalized operations to +be performed in a row without the loss information\footnote{A description of +the floating point format used is shown in figures~\ref{exponent-format} +and~\ref{mantissa-format}.}. A discussion of the mathematics behind +unnormalized arithmetic is in appendix~\ref{unnorm-math}. + +The optimizations that the compiler can perform fall into several categories: + +\subsection{Post Multiply Normalization} + +When more than two multiplications are performed in a row, the intermediate +normalization of the results between multiplications can be eliminated. +This is because with each multiplication, the mantissa can become +denormalized by at most one bit. If there are guard bits on the mantissas +to prevent bits from ``falling off'' the end during multiplications, the +normalization can be postponed until after a sequence of several +multiplies\footnote{Using unnormalized numbers for math is not a new idea; a +good example of it is the Control Data CDC 6600, designed by Seymour Cray. +\cite{thornton:cdc6600} The CDC 6600 had all of its instructions performing +unnormalized arithmetic, with a separate {\tt NORMALIZE} instruction.}. + +% This is an example of how you would use tgrind to include an example +% of source code; it is commented out in this template since the code +% example file does not exist. To use it, you need to remove the '%' on the +% beginning of the line, and insert your own information in the call. +% +%\tagrind[htbp]{code/pmn.s.tex}{Post Multiply Normalization}{opt:pmn} + +As you can see, the intermediate results can be multiplied together, with no +need for intermediate normalizations due to the guard bit. It is only at +the end of the operation that the normalization must be performed, in order +to get it into a format suitable for storing in memory\footnote{Note that +for purposed of clarity, the pipeline delays were considered to be 0, and +the branches were not delayed.}. + +\subsection{Block Exponent} + +In a unoptimized sequence of additions, the sequence of operations is as +follows for each pair of numbers ($m_1$,$e_1$) and ($m_2$,$e_2$). +\begin{enumerate} + \item Compare $e_1$ and $e_2$. + \item Shift the mantissa associated with the smaller exponent $|e_1-e_2|$ + places to the right. + \item Add $m_1$ and $m_2$. + \item Find the first one in the resulting mantissa. + \item Shift the resulting mantissa so that normalized + \item Adjust the exponent accordingly. +\end{enumerate} + +Out of 6 steps, only one is the actual addition, and the rest are involved +in aligning the mantissas prior to the add, and then normalizing the result +afterward. In the block exponent optimization, the largest mantissa is +found to start with, and all the mantissa's shifted before any additions +take place. Once the mantissas have been shifted, the additions can take +place one after another\footnote{This requires that for n consecutive +additions, there are $\log_{2}n$ high guard bits to prevent overflow. In +the $\mu$FPU, there are 3 guard bits, making up to 8 consecutive additions +possible.}. An example of the Block Exponent optimization on the expression +X = A + B + C is given in figure~\ref{opt:be}. + +% This is an example of how you would use tgrind to include an example +% of source code; it is commented out in this template since the code +% example file does not exist. To use it, you need to remove the '%' on the +% beginning of the line, and insert your own information in the call. +% +%\tgrind[htbp]{code/be.s.tex}{Block Exponent}{opt:be} + +\section{Integer optimizations} + +As well as the floating point optimizations described above, there are +also integer optimizations that can be used in the $\mu$FPU. In concert +with the floating point optimizations, these can provide a significant +speedup. + +\subsection{Conversion to fixed point} + +Integer operations are much faster than floating point operations; if it is +possible to replace floating point operations with fixed point operations, +this would provide a significant increase in speed. + +This conversion can either take place automatically or or based on a +specific request from the programmer. To do this automatically, the +compiler must either be very smart, or play fast and loose with the accuracy +and precision of the programmer's variables. To be ``smart'', the computer +must track the ranges of all the floating point variables through the +program, and then see if there are any potential candidates for conversion +to floating point. This technique is discussed further in +section~\ref{range-tracking}, where it was implemented. + +The other way to do this is to rely on specific hints from the programmer +that a certain value will only assume a specific range, and that only a +specific precision is desired. This is somewhat more taxing on the +programmer, in that he has to know the ranges that his values will take at +declaration time (something normally abstracted away), but it does provide +the opportunity for fine-tuning already working code. + +Potential applications of this would be simulation programs, where the +variable represents some physical quantity; the constraints of the physical +system may provide bounds on the range the variable can take. +\subsection{Small Constant Multiplications} + +One other class of optimizations that can be done is to replace +multiplications by small integer constants into some combination of +additions and shifts. Addition and shifting can be significantly faster +than multiplication. This is done by using some combination of +\begin{eqnarray*} +a_i & = & a_j + a_k \\ +a_i & = & 2a_j + a_k \\ +a_i & = & 4a_j + a_k \\ +a_i & = & 8a_j + a_k \\ +a_i & = & a_j - a_k \\ +a_i & = & a_j \ll m \mbox{shift} +\end{eqnarray*} +instead of the multiplication. For example, to multiply $s$ by 10 and store +the result in $r$, you could use: +\begin{eqnarray*} +r & = & 4s + s\\ +r & = & r + r +\end{eqnarray*} +Or by 59: +\begin{eqnarray*} +t & = & 2s + s \\ +r & = & 2t + s \\ +r & = & 8r + t +\end{eqnarray*} +Similar combinations can be found for almost all of the smaller +integers\footnote{This optimization is only an ``optimization'', of course, +when the amount of time spent on the shifts and adds is less than the time +that would be spent doing the multiplication. Since the time costs of these +operations are known to the compiler in order for it to do scheduling, it is +easy for the compiler to determine when this optimization is worth using.}. +\cite{magenheimer:precision} + +\section{Other optimizations} + +\subsection{Low-level parallelism} + +The current trend is towards duplicating hardware at the lowest level to +provide parallelism\footnote{This can been seen in the i860; floating point +additions and multiplications can proceed at the same time, and the RISC +core be moving data in and out of the floating point registers and providing +flow control at the same time the floating point units are active. \cite{byte:i860}} + +Conceptually, it is easy to take advantage to low-level parallelism in the +instruction stream by simply adding more functional units to the $\mu$FPU, +widening the instruction word to control them, and then scheduling as many +operations to take place at one time as possible. + +However, simply adding more functional units can only be done so many times; +there is only a limited amount of parallelism directly available in the +instruction stream, and without it, much of the extra resources will go to +waste. One process used to make more instructions potentially schedulable +at any given time is ``trace scheduling''. This technique originated in the +Bulldog compiler for the original VLIW machine, the ELI-512. +\cite{ellis:bulldog,colwell:vliw} In trace scheduling, code can be +scheduled through many basic blocks at one time, following a single +potential ``trace'' of program execution. In this way, instructions that +{\em might\/} be executed depending on a conditional branch further down in +the instruction stream are scheduled, allowing an increase in the potential +parallelism. To account for the cases where the expected branch wasn't +taken, correction code is inserted after the branches to undo the effects of +any prematurely executed instructions. + +\subsection{Pipeline optimizations} + +In addition to having operations going on in parallel across functional +units, it is also typical to have several operations in various stages of +completion in each unit. This pipelining allows the throughput of the +functional units to be increased, with no increase in latency. + +There are several ways pipelined operations can be optimized. On the +hardware side, support can be added to allow data to be recirculated back +into the beginning of the pipeline from the end, saving a trip through the +registers. On the software side, the compiler can utilize several tricks to +try to fill up as many of the pipeline delay slots as possible, as +seendescribed by Gibbons. \cite{gib86} + + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/contents.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/contents.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,11 @@ + % -*- Mode:TeX -*- +%% This file simply contains the commands that actually generate the table of +%% contents and lists of figures and tables. You can omit any or all of +%% these files by simply taking out the appropriate command. For more +%% information on these files, see appendix C.3.3 of the LaTeX manual. +\tableofcontents +\newpage +\listoffigures +\newpage +\listoftables + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/cover.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/cover.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,132 @@ +% -*-latex-*- +% +% For questions, comments, concerns or complaints: +% thesis@mit.edu +% +% +% $Log: cover.tex,v $ +% Revision 1.8 2008/05/13 15:02:15 jdreed +% Degree month is June, not May. Added note about prevdegrees. +% Arthur Smith's title updated +% +% Revision 1.7 2001/02/08 18:53:16 boojum +% changed some \newpages to \cleardoublepages +% +% Revision 1.6 1999/10/21 14:49:31 boojum +% changed comment referring to documentstyle +% +% Revision 1.5 1999/10/21 14:39:04 boojum +% *** empty log message *** +% +% Revision 1.4 1997/04/18 17:54:10 othomas +% added page numbers on abstract and cover, and made 1 abstract +% page the default rather than 2. (anne hunter tells me this +% is the new institute standard.) +% +% Revision 1.4 1997/04/18 17:54:10 othomas +% added page numbers on abstract and cover, and made 1 abstract +% page the default rather than 2. (anne hunter tells me this +% is the new institute standard.) +% +% Revision 1.3 93/05/17 17:06:29 starflt +% Added acknowledgements section (suggested by tompalka) +% +% Revision 1.2 92/04/22 13:13:13 epeisach +% Fixes for 1991 course 6 requirements +% Phrase "and to grant others the right to do so" has been added to +% permission clause +% Second copy of abstract is not counted as separate pages so numbering works +% out +% +% Revision 1.1 92/04/22 13:08:20 epeisach + +% NOTE: +% These templates make an effort to conform to the MIT Thesis specifications, +% however the specifications can change. We recommend that you verify the +% layout of your title page with your thesis advisor and/or the MIT +% Libraries before printing your final copy. +\title{An Optimizing Compiler for Low-Level Floating Point Operations} + +\author{Robert McIntyre} +% If you wish to list your previous degrees on the cover page, use the +% previous degrees command: +% \prevdegrees{A.A., Harvard University (1985)} +% You can use the \\ command to list multiple previous degrees +% \prevdegrees{B.S., University of California (1978) \\ +% S.M., Massachusetts Institute of Technology (1981)} +\department{Department of Electrical Engineering and Computer Science} + +% If the thesis is for two degrees simultaneously, list them both +% separated by \and like this: +% \degree{Doctor of Philosophy \and Master of Science} +\degree{Bachelor of Science in Computer Science and Engineering} + +% As of the 2007-08 academic year, valid degree months are September, +% February, or June. The default is June. +\degreemonth{June} +\degreeyear{1990} +\thesisdate{May 18, 1990} + +%% By default, the thesis will be copyrighted to MIT. If you need to copyright +%% the thesis to yourself, just specify the `vi' documentclass option. If for +%% some reason you want to exactly specify the copyright notice text, you can +%% use the \copyrightnoticetext command. +%\copyrightnoticetext{\copyright IBM, 1990. Do not open till Xmas.} + +% If there is more than one supervisor, use the \supervisor command +% once for each. +\supervisor{William J. Dally}{Associate Professor} + +% This is the department committee chairman, not the thesis committee +% chairman. You should replace this with your Department's Committee +% Chairman. +\chairman{Arthur C. Smith}{Chairman, Department Committee on Graduate Theses} + +% Make the titlepage based on the above information. If you need +% something special and can't use the standard form, you can specify +% the exact text of the titlepage yourself. Put it in a titlepage +% environment and leave blank lines where you want vertical space. +% The spaces will be adjusted to fill the entire page. The dotted +% lines for the signatures are made with the \signature command. +\maketitle + +% The abstractpage environment sets up everything on the page except +% the text itself. The title and other header material are put at the +% top of the page, and the supervisors are listed at the bottom. A +% new page is begun both before and after. Of course, an abstract may +% be more than one page itself. If you need more control over the +% format of the page, you can use the abstract environment, which puts +% the word "Abstract" at the beginning and single spaces its text. + +%% You can either \input (*not* \include) your abstract file, or you can put +%% the text of the abstract directly between the \begin{abstractpage} and +%% \end{abstractpage} commands. + +% First copy: start a new page, and save the page number. +\cleardoublepage +% Uncomment the next line if you do NOT want a page number on your +% abstract and acknowledgments pages. +\pagestyle{empty} +\setcounter{savepage}{\thepage} +\begin{abstractpage} +\input{abstract} +\end{abstractpage} + +% Additional copy: start a new page, and reset the page number. This way, +% the second copy of the abstract is not counted as separate pages. +% Uncomment the next 6 lines if you need two copies of the abstract +% page. +% \setcounter{page}{\thesavepage} +% \begin{abstractpage} +% \input{abstract} +% \end{abstractpage} + +\cleardoublepage + +\section*{Acknowledgments} + +This is the acknowledgements section. You should replace this with your +own acknowledgements. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -*-latex-*- diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/main.bib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/main.bib Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,356 @@ +@preamble{ "\newcommand{\noopsort}[1]{} " + # "\newcommand{\printfirst}[2]{#1} " + # "\newcommand{\singleletter}[1]{#1} " + # "\newcommand{\switchargs}[2]{#2#1} " } + +@ARTICLE{article-minimal, + author = {L[eslie] A. Aamport}, + title = {The Gnats and Gnus Document Preparation System}, + journal = {\mbox{G-Animal's} Journal}, + year = 1986, +} + +@ARTICLE{article-full, + author = {L[eslie] A. Aamport}, + title = {The Gnats and Gnus Document Preparation System}, + journal = {\mbox{G-Animal's} Journal}, + year = 1986, + volume = 41, + number = 7, + pages = "73+", + month = jul, + note = "This is a full ARTICLE entry", +} + +The KEY field is here to override the KEY field in the journal being +cross referenced (so is the NOTE field, in addition to its imparting +information). + +@ARTICLE{article-crossref, + crossref = {WHOLE-JOURNAL}, + key = "", + author = {L[eslie] A. Aamport}, + title = {The Gnats and Gnus Document Preparation System}, + pages = "73+", + note = "This is a cross-referencing ARTICLE entry", +} + +@ARTICLE{whole-journal, + key = "GAJ", + journal = {\mbox{G-Animal's} Journal}, + year = 1986, + volume = 41, + number = 7, + month = jul, + note = {The entire issue is devoted to gnats and gnus + (this entry is a cross-referenced ARTICLE (journal))}, +} + +@INBOOK{inbook-minimal, + author = "Donald E. Knuth", + title = "Fundamental Algorithms", + publisher = "Addison-Wesley", + year = "{\noopsort{1973b}}1973", + chapter = "1.2", +} + +@INBOOK{inbook-full, + author = "Donald E. Knuth", + title = "Fundamental Algorithms", + volume = 1, + series = "The Art of Computer Programming", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + edition = "Second", + month = "10~" # jan, + year = "{\noopsort{1973b}}1973", + type = "Section", + chapter = "1.2", + pages = "10--119", + note = "This is a full INBOOK entry", +} + +@INBOOK{inbook-crossref, + crossref = "whole-set", + title = "Fundamental Algorithms", + volume = 1, + series = "The Art of Computer Programming", + edition = "Second", + year = "{\noopsort{1973b}}1973", + type = "Section", + chapter = "1.2", + note = "This is a cross-referencing INBOOK entry", +} + +@BOOK{book-minimal, + author = "Donald E. Knuth", + title = "Seminumerical Algorithms", + publisher = "Addison-Wesley", + year = "{\noopsort{1973c}}1981", +} + +@BOOK{book-full, + author = "Donald E. Knuth", + title = "Seminumerical Algorithms", + volume = 2, + series = "The Art of Computer Programming", + publisher = "Addison-Wesley", + address = "Reading, Massachusetts", + edition = "Second", + month = "10~" # jan, + year = "{\noopsort{1973c}}1981", + note = "This is a full BOOK entry", +} + +@BOOK{book-crossref, + crossref = "whole-set", + title = "Seminumerical Algorithms", + volume = 2, + series = "The Art of Computer Programming", + edition = "Second", + year = "{\noopsort{1973c}}1981", + note = "This is a cross-referencing BOOK entry", +} + +@BOOK{whole-set, + author = "Donald E. Knuth", + publisher = "Addison-Wesley", + title = "The Art of Computer Programming", + series = "Four volumes", + year = "{\noopsort{1973a}}{\switchargs{--90}{1968}}", + note = "Seven volumes planned (this is a cross-referenced set of BOOKs)", +} + +@BOOKLET{booklet-minimal, + key = "Kn{\printfirst{v}{1987}}", + title = "The Programming of Computer Art", +} + +@BOOKLET{booklet-full, + author = "Jill C. Knvth", + title = "The Programming of Computer Art", + howpublished = "Vernier Art Center", + address = "Stanford, California", + month = feb, + year = 1988, + note = "This is a full BOOKLET entry", +} + +@INCOLLECTION{incollection-minimal, + author = "Daniel D. Lincoll", + title = "Semigroups of Recurrences", + booktitle = "High Speed Computer and Algorithm Organization", + publisher = "Academic Press", + year = 1977, +} + +@INCOLLECTION{incollection-full, + author = "Daniel D. Lincoll", + title = "Semigroups of Recurrences", + editor = "David J. Lipcoll and D. H. Lawrie and A. H. Sameh", + booktitle = "High Speed Computer and Algorithm Organization", + number = 23, + series = "Fast Computers", + chapter = 3, + type = "Part", + pages = "179--183", + publisher = "Academic Press", + address = "New York", + edition = "Third", + month = sep, + year = 1977, + note = "This is a full INCOLLECTION entry", +} + +@INCOLLECTION{incollection-crossref, + crossref = "whole-collection", + author = "Daniel D. Lincoll", + title = "Semigroups of Recurrences", + pages = "179--183", + note = "This is a cross-referencing INCOLLECTION entry", +} + +@BOOK{whole-collection, + editor = "David J. Lipcoll and D. H. Lawrie and A. H. Sameh", + title = "High Speed Computer and Algorithm Organization", + booktitle = "High Speed Computer and Algorithm Organization", + number = 23, + series = "Fast Computers", + publisher = "Academic Press", + address = "New York", + edition = "Third", + month = sep, + year = 1977, + note = "This is a cross-referenced BOOK (collection) entry", +} + +@MANUAL{manual-minimal, + key = "Manmaker", + title = "The Definitive Computer Manual", +} + +@MANUAL{manual-full, + author = "Larry Manmaker", + title = "The Definitive Computer Manual", + organization = "Chips-R-Us", + address = "Silicon Valley", + edition = "Silver", + month = apr # "-" # may, + year = 1986, + note = "This is a full MANUAL entry", +} + +@MASTERSTHESIS{mastersthesis-minimal, + author = "{\'{E}}douard Masterly", + title = "Mastering Thesis Writing", + school = "Stanford University", + year = 1988, +} + +@MASTERSTHESIS{mastersthesis-full, + author = "{\'{E}}douard Masterly", + title = "Mastering Thesis Writing", + school = "Stanford University", + type = "Master's project", + address = "English Department", + month = jun # "-" # aug, + year = 1988, + note = "This is a full MASTERSTHESIS entry", +} + +@MISC{misc-minimal, + key = "Missilany", + note = "This is a minimal MISC entry", +} + +@MISC{misc-full, + author = "Joe-Bob Missilany", + title = "Handing out random pamphlets in airports", + howpublished = "Handed out at O'Hare", + month = oct, + year = 1984, + note = "This is a full MISC entry", +} + +@STRING{STOC-key = "OX{\singleletter{stoc}}"} + +@STRING{ACM = "The OX Association for Computing Machinery"} + +@STRING{STOC = " Symposium on the Theory of Computing"} + +@INPROCEEDINGS{inproceedings-minimal, + author = "Alfred V. Oaho and Jeffrey D. Ullman and Mihalis Yannakakis", + title = "On Notions of Information Transfer in {VLSI} Circuits", + booktitle = "Proc. Fifteenth Annual ACM" # STOC, + year = 1983, +} + +@INPROCEEDINGS{inproceedings-full, + author = "Alfred V. Oaho and Jeffrey D. Ullman and Mihalis Yannakakis", + title = "On Notions of Information Transfer in {VLSI} Circuits", + editor = "Wizard V. Oz and Mihalis Yannakakis", + booktitle = "Proc. Fifteenth Annual ACM" # STOC, + number = 17, + series = "All ACM Conferences", + pages = "133--139", + month = mar, + year = 1983, + address = "Boston", + organization = ACM, + publisher = "Academic Press", + note = "This is a full INPROCEDINGS entry", +} + +@INPROCEEDINGS{inproceedings-crossref, + crossref = "whole-proceedings", + author = "Alfred V. Oaho and Jeffrey D. Ullman and Mihalis Yannakakis", + title = "On Notions of Information Transfer in {VLSI} Circuits", + organization = "", + pages = "133--139", + note = "This is a cross-referencing INPROCEEDINGS entry", +} + +@PROCEEDINGS{proceedings-minimal, + key = STOC-key, + title = "Proc. Fifteenth Annual" # STOC, + year = 1983, +} + +@PROCEEDINGS{proceedings-full, + editor = "Wizard V. Oz and Mihalis Yannakakis", + title = "Proc. Fifteenth Annual" # STOC, + number = 17, + series = "All ACM Conferences", + month = mar, + year = 1983, + address = "Boston", + organization = ACM, + publisher = "Academic Press", + note = "This is a full PROCEEDINGS entry", +} + +@PROCEEDINGS{whole-proceedings, + key = STOC-key, + organization = ACM, + title = "Proc. Fifteenth Annual" # STOC, + address = "Boston", + year = 1983, + booktitle = "Proc. Fifteenth Annual ACM" # STOC, + note = "This is a cross-referenced PROCEEDINGS", +} + +@PHDTHESIS{phdthesis-minimal, + author = "F. Phidias Phony-Baloney", + title = "Fighting Fire with Fire: Festooning {F}rench Phrases", + school = "Fanstord University", + year = 1988, +} + +@PHDTHESIS{phdthesis-full, + author = "F. Phidias Phony-Baloney", + title = "Fighting Fire with Fire: Festooning {F}rench Phrases", + school = "Fanstord University", + type = "{PhD} Dissertation", + address = "Department of French", + month = jun # "-" # aug, + year = 1988, + note = "This is a full PHDTHESIS entry", +} + +@TECHREPORT{techreport-minimal, + author = "Tom Terrific", + title = "An {$O(n \log n / \! \log\log n)$} Sorting Algorithm", + institution = "Fanstord University", + year = 1988, +} + +@TECHREPORT{techreport-full, + author = "Tom T{\'{e}}rrific", + title = "An {$O(n \log n / \! \log\log n)$} Sorting Algorithm", + institution = "Fanstord University", + type = "Wishful Research Result", + number = "7", + address = "Computer Science Department, Fanstord, California", + month = oct, + year = 1988, + note = "This is a full TECHREPORT entry", +} + +@UNPUBLISHED{unpublished-minimal, + author = "Ulrich {\"{U}}nderwood and Ned {\~N}et and Paul {\={P}}ot", + title = "Lower Bounds for Wishful Research Results", + note = "Talk at Fanstord University (this is a minimal UNPUBLISHED entry)", +} + +@UNPUBLISHED{unpublished-full, + author = "Ulrich {\"{U}}nderwood and Ned {\~N}et and Paul {\={P}}ot", + title = "Lower Bounds for Wishful Research Results", + month = nov # ", " # dec, + year = 1988, + note = "Talk at Fanstord University (this is a full UNPUBLISHED entry)", +} + +@MISC{random-note-crossref, + key = {Volume-2}, + note = "Volume~2 is listed under Knuth \cite{book-full}" +} diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/main.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/main.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,46 @@ +% -*- Mode:TeX -*- + +%% IMPORTANT: The official thesis specifications are available at: +%% http://libraries.mit.edu/archives/thesis-specs/ +%% +%% Please verify your thesis' formatting and copyright +%% assignment before submission. If you notice any +%% discrepancies between these templates and the +%% MIT Libraries' specs, please let us know +%% by e-mailing thesis@mit.edu + +%% The documentclass options along with the pagestyle can be used to generate +%% a technical report, a draft copy, or a regular thesis. You may need to +%% re-specify the pagestyle after you \include cover.tex. For more +%% information, see the first few lines of mitthesis.cls. + +%\documentclass[12pt,vi,twoside]{mitthesis} +%% +%% If you want your thesis copyright to you instead of MIT, use the +%% ``vi'' option, as above. +%% +%\documentclass[12pt,twoside,leftblank]{mitthesis} +%% +%% If you want blank pages before new chapters to be labelled ``This +%% Page Intentionally Left Blank'', use the ``leftblank'' option, as +%% above. + +\documentclass[12pt,twoside]{mitthesis} +%\usepackage{lgrind} +\pagestyle{plain} + +\begin{document} + +\include{cover} +% Some departments (e.g. 5) require an additional signature page. See +% signature.tex for more information and uncomment the following line if +% applicable. +% \include{signature} +\pagestyle{plain} +\include{contents} +\include{chap1} +\include{chap2} +\appendix +\include{biblio} +\end{document} + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/mitthesis.cls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/mitthesis.cls Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,535 @@ +% $Log: mitthesis.cls,v $ +% Revision 1.9 2012/02/15 15:48:16 jdreed +% Tweak the "permission" statement per the Libraries' specs +% retrieved 15-Feb-2012 +% +% Revision 1.8 2009/07/27 14:23:50 boojum +% added changing draft mark +% +% Revision 1.6 2005/05/13 19:57:40 boojum +% added leftblank option +% +% Revision 1.5 2002/04/18 14:10:08 boojum +% changed doublespace into setspace for 2e compliance +% +% Revision 1.4 2001/02/08 18:57:13 boojum +% turned two newpages into cleardoublepages +% +% Revision 1.3 2000/08/14 14:53:29 boojum +% commented out footheight, which is relevant for drafthead +% +% Revision 1.2 1999/10/21 14:51:33 boojum +% changed references to documentstyle to documentclass in comments +% +% Revision 1.1 1999/10/21 14:39:31 boojum +% Initial revision +% +%Revision 1.7 1998/04/01 20:45:34 othomas +%removed offending phrase ", and to grant others the right to do so" from copyright notice. +% +%Revision 1.6 96/06/26 15:07:29 othomas +%safety checkin. +% +%Revision 1.5 93/06/07 15:38:50 starflt +%Altered 'vi' option copyright wording to comply with new Institute +%Archives requirements and MIT lawyers. +% +%Revision 1.4 92/08/19 16:51:06 lwvanels +%Updated Course 6 title page for new permissions. +% +%Revision 1.3 92/04/23 10:16:15 epeisach +%Fixed comment character in rcs file +% +%Revision 1.2 92/04/22 13:12:02 epeisach +%Fixes for 1991 course 6 requirements +%Phrase "and to grant others the right to do so" has been added to +%permission clause +%Second copy of abstract is not counted as separate pages so numbering works +%out +% +%Revision 1.1 90/05/04 11:45:53 lwvanels +%Initial revision + +% +% LaTeX format for theses at MIT +% Based on "Specifications for Thesis Preparation" + +% `vi' and `upcase' options by Krishna Sethuraman - krishna@athena.mit.edu +% Margins and heading types by Peter Nuth - nuth@ai.mit.edu +% Title and abstract page by Stephen Gildea - gildea@erl.mit.edu +% Look in this directory for example file mitthesis.doc +% Also for propcover.tex - Boilerplate for PHD proposal. + +% To use this style - say something like: +% for dull, boring thesis format: +% \documentclass[12pt]{mitthesis} +% \pagestyle{plain} +% OR for fast drafts: +% \documentclass[11pt,singlespace,draft]{mitthesis} +% \pagestyle{drafthead} +% OR for Tech Reports: +% \documentclass[12pt,twoside]{mitthesis} +% \pagestyle{headings} +% OR +% some other combination... +% +%%%% New options: +% +% Option `twoside': +% Good for producing Tech Reports. +% The default is single-sided printing, which is what M.I.T. wants on the +% thesis document itself. +% +% Option `singlespace': +% Good for drafts. +% Double-spaced theses are the default. +% That is what M.I.T. asks for in the formal specifications. +% +% Note that MIT does not REQUIRE all theses to be double-spaced anymore. +% Someone in the library system said that it's OK to be single-spaced. +% (Regardless of what the specs. say...) +% To get singlespacing in an area - Use the 'singlespace' environment. +% +% Option `draft': +% Puts `overfull' boxes at the end of lines that are too long. +% +% Pagestyle `drafthead': +% Puts the date and the label ``*DRAFT*'' in the footer. +% +%%%%%%%%%% +% +%%%% Parameters to initialize for boilerplate page: +% +% \title{Mixed Circular Cylindrical Shells} +% \author{J. Casey Salas} +% \prevdegrees{B.S., University of California (1978) \\ +% S.M., Massachusetts Institute of Technology (1981)} +% \department{Department of Electrical Engineering and Computer Science} +% \degree{Doctor of Philosophy} +%% If the thesis is for two degrees simultaneously, list them both +%% separated by \and like this: +% \degree{Doctor of Philosophy \and Master of Science} +% \degreemonth{February} +% \degreeyear{1987} +% \thesisdate{December 10, 1986} +%% If the thesis is copyright by the Institute, leave this line out and +%% the standard copyright line will be used instead. +% \copyrightnotice{J. Casey Salas, 1986} +%% If there is more than one supervisor, use the \supervisor command +%% once for each. +% \supervisor{John D. Galli}{Director, Sound Instrument Laboratory} +%% This is the department committee chairman, not the thesis committee chairman +% \chairman{Arthur C. Smith} +% {Chairman, Departmental Committee on Graduate Students} +%% Make the titlepage based on the above information. If you need +%% something special and can't use the standard form, you can specify +%% the exact text of the titlepage yourself. Put it in a titlepage +%% environment and leave blank lines where you want vertical space. +%% The spaces will be adjusted to fill the entire page. The dotted +%% lines for the signatures are made with the \signature command. +% +%% The abstractpage environment sets up everything on the page except +%% the text itself. The title and other header material are put at the +%% top of the page, and the supervisors are listed at the bottom. A +%% new page is begun both before and after. Of course, an abstract may +%% be more than one page itself. If you need more control over the +%% format of the page, you can use the abstract environment, which puts +%% the word "Abstract" at the beginning and single spaces its text. +% +% \begin{abstractpage} +% Abstract goes here. +% \end{abstractpage} +% +%%%%%%%% Newer additions +% +% documentclass options - +% vi For MIT course VI or VIII thesis - will copyright the thesis to +% you while giving MIT permission to copy and distribute it. +% upcase Will put much of the cover page in uppercase, as per the +% example on page 17 of the *Specifications for Thesis +% Preparation*, (revised 1989) +% Also added ``All Rights Reserved'' to default copyright notice. +% +%%%%%%%%%%% +% +% Documentclass options (vi and upcase) and changes to copyright notice +% Copyright (c) 1990, by Krishna Sethuraman. +% +% Pagestyle and header generation +% Copyright (c) 1987, 1988 by Peter Nuth +% +% Original version +% Copyright (c) 1987 by Stephen Gildea +% Permission to copy all or part of this work is granted, provided +% that the copies are not made or distributed for resale, and that +% the copyright notice and this notice are retained. +% +% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO +% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK, +% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS +% FOR ANY PARTICULAR PURPOSE. +%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{mitthesis}[1999/10/20] + +\def\mystretch{1.5} % Double spacing hack +\DeclareOption{doublespace}{} % This is default + % So we do not read this style twice +\DeclareOption{singlespace}{ % If he explicitly wants single spacing + \typeout{Single spaced} + \def\mystretch{1}} + +%% `vi' and `upcase' document style options. Krishna Sethuraman (1990) +\newcount\vithesis +\DeclareOption{vi}{\typeout{Course VI/VIII thesis style.}\advance\vithesis by1} +\vithesis=0 + +\DeclareOption{upcase}{\typeout{Uppercase cover page.} + \gdef\choosecase#1{\uppercase\expandafter{#1}}} +\def\choosecase#1{#1} + +%% leftblank option by Kevin Fu +\newif\if@leftblank \@leftblankfalse + +\DeclareOption{leftblank}{\typeout{Intentionally Leaving Pages Blank} +\@leftblanktrue} + +% Thesis looks much like report +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}} +\ProcessOptions +\LoadClass{report} + +% If the user wants single spacing, set baselinestretch=1. + +\usepackage{setspace} + +% Note - doublespace.sty has some float-related troubles in +% combination with graphics or color, and is not officially compliant +% with 2e. setspace is a replacement which is 2e-compliant. + +% Read the doublespace style that we got from Rochester: +%\input setdoublespace.sty + +\def\baselinestretch{\mystretch} % Double spacing hack + +%%%%%%% Set up margins and formatting params %%% + +% Margins. +% Note we want 1in top margin assuming no header line, so push header +% into 1in margin. +% Draft mode brings the header back down. + +\setlength{\oddsidemargin}{0.25in} % 1.25in left margin +\setlength{\evensidemargin}{0.25in} % 1.25in left margin (even pages) +\setlength{\topmargin}{0.0in} % 1in top margin +\setlength{\textwidth}{6.0in} % 6.0in text - 1.25in rt margin +\setlength{\textheight}{9in} % Body ht for 1in margins +\addtolength{\topmargin}{-\headheight} % No header, so compensate +\addtolength{\topmargin}{-\headsep} % for header height and separation + +% The next two macros compensate page style for headers and footers +% We only need them in page styles that USE headers and footers. + % If we have a header, it must be 1in from top of page. +\def\pulldownheader{ % Shift header down 1in from top + \addtolength{\topmargin}{\headheight} + \addtolength{\topmargin}{\headsep} + \addtolength{\textheight}{-\headheight} + \addtolength{\textheight}{-\headsep} +} + % If we have a footer, put it 1in up from bottom +\def\pullupfooter{ % Shift footer up + \addtolength{\textheight}{-\footskip} +% \addtolength{\textheight}{-\footheight} %footheight doesn't +% exist in 2e +} + +%%%%%%% End of margins and formatting params %%% + +%%%%%%% Fix various header and footer problems %%% + +% Draft mark on the right side of left pages (outside) +% this mark is also the only one visible on single sided. +\newcommand{\draftrmark}{**DRAFT**} +% Draft mark on the left side of right pages (outside) +\newcommand{\draftlmark}{**DRAFT**} % + +% Macros to make changing the Draft easier +\newcommand{\drmark}[1]{\renewcommand{\draftrmark}{#1}} +\newcommand{\dlmark}[1]{\renewcommand{\draftlmark}{#1}} +\newcommand{\dmark}[1]{\drmark{#1}\dlmark{#1}} + +% Format for draft of thesis. Define our own PageStyle - +% Just like headings, but has foot lines with the date and warning + +\if@twoside % If two-sided printing. +\def\ps@drafthead{ + \let\@mkboth\markboth + \def\@oddfoot{\rm \today \hfil \sc \draftrmark} + \def\@evenfoot{\sc \draftlmark \hfil \rm \today } + \def\@evenhead{\rm \thepage\hfil \sl \leftmark} + \def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} + \def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}{}} + \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@ + \thesection. \ \fi ##1}}} + \pulldownheader % Bring header down from edge + \pullupfooter % Bring footer up +} +\else % If one-sided printing. +\def\ps@drafthead{ + \let\@mkboth\markboth + \def\@oddfoot{\rm \today \hfil \sc \draftrmark} + \def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} + \def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}} + \pulldownheader % Bring header down from edge + \pullupfooter % Bring footer up +} +\fi + +% I redefine these formats that were defined in report.sty +% Definition of 'headings' page style +% Note the use of ##1 for parameter of \def\chaptermark inside the +% \def\ps@headings. +% + +\if@twoside % If two-sided printing. +\def\ps@headings{\let\@mkboth\markboth + \def\@oddfoot{} + \def\@evenfoot{} % No feet. + \def\@evenhead{\rm \thepage\hfil \sl \leftmark} % Left heading. + \def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} % Right heading. + \def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}{}} + \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@ + \thesection. \ \fi ##1}}} + \pulldownheader % Bring header down from edge +} +\else % If one-sided printing. +\def\ps@headings{\let\@mkboth\markboth + \def\@oddfoot{} + \def\@evenfoot{} % No feet. + \def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage} % Heading. + \def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}} + \pulldownheader % Bring header down from edge +} +\fi + +% Redefinition of 'myheadings' page style. +% +\def\ps@myheadings{\let\@mkboth\@gobbletwo + \def\@oddfoot{} + \def\@evenfoot{} + \def\sectionmark##1{} + \def\subsectionmark##1{} + \def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox {}} % + \def\@oddhead{\hbox{}\sl\rightmark \hfil \rm\thepage} % + \pulldownheader % Bring header down from edge +} + +% Redefine '/chapter' to always start on an odd page. +% Should make no difference in singleside mode. +% +\if@leftblank +% Prints "THIS PAGE INTENTIONALLY LEFT BLANK" on blank pages. +\def\chapter{\clearpage\ifodd\c@page\else + \hbox{}\par\vfill\centerline% + {THIS PAGE INTENTIONALLY LEFT BLANK}% + \vfill\newpage\fi + \thispagestyle{plain} % Page style of chapter page is 'plain' + \global\@topnum\z@ % Prevents figures from going at top of page. + \@afterindentfalse % Suppresses indent in first paragraph. Change + \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent. +\else +\def\chapter{\cleardoublepage % Starts new page. + \thispagestyle{plain} % Page style of chapter page is 'plain' + \global\@topnum\z@ % Prevents figures from going at top of page. + \@afterindentfalse % Suppresses indent in first paragraph. Change + \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent. +\fi +% If using the report style, use - instead of . in the figure number. +\@ifundefined{thechapter}{}{\def\thefigure{\thechapter-\arabic{figure}}} + + +%%%%%%%%% End of Style parameters %%%% + +% Here's Gildea's Boilerplate Stuff. +% Copyright (c) 1987 by Stephen Gildea +% Permission to copy all or part of this work is granted, provided +% that the copies are not made or distributed for resale, and that +% the copyright notice and this notice are retained. + +%% Define all the pieces that go on the title page and the abstract. + +% \title and \author already exist + +\def\prevdegrees#1{\gdef\@prevdegrees{#1}} +\def\@prevdegrees{} + +\def\department#1{\gdef\@department{#1}} + +% If you are getting two degrees, use \and between the names. +\def\degree#1{\setbox0\hbox{#1} %for side effect of setting \@degreeword + \gdef\@degree{#1}} + +% \and is used inside the \degree argument to separate two degrees +\def\and{\gdef\@degreeword{degrees} \par and \par} +\def\@degreeword{degree} + +% The copyright notice stuff is a tremendous mess. +% +% \@copyrightnotice is used by \maketitle to actually put text on the +% page; it defaults to ``Copyright MIT 19xx. All rights reserved.'' +% \copyrightnoticetext takes an argument and defined \@copyrightnotice +% to that argument. \copyrightnotice takes an argument, and calls +% \copyrightnoticetext with that argument, preceeded by a copyright +% symbol and followed by ``All rights reserved.'' and the standard +% permission notice. +% +% If you use the 'vi' option, \copyrightnoticetext is used to set the +% copyright to ``(C) Your Name, Current Year in Roman Numerals.'' +% followed by the permission notice. + +% If there is no \copyrightnotice command, it is asssumed that MIT +% holds the copyright. This commands adds the copyright symbol to the +% beginning, and puts the standard permission notice below. +%% ``All rights reserved'' added. Krishna Sethuraman (1990) +\def\copyrightnotice#1{\copyrightnoticetext{\copyright\ #1. All rights +reserved.\par\permission}} + +% Occacionally you will need to exactly specify the text of the +% copyright notice. The \copyrightnoticetext command is then useful. +\long\def\copyrightnoticetext#1{\gdef\@copyrightnotice{#1}} +\def\@copyrightnotice{\copyright\ \Mit\ \@degreeyear. All rights reserved.} + +%% `vi' documentclass option: Specifying this option automatically +%% copyrights the thesis to the author and gives MIT permission to copy and +%% distribute the document. If you want, you can still specify +%% \copyrightnotice{stuff} to copyright to someone else, or +%% \copyrightnoticetext{stuff} to specify the exact text of the copyright +%% notice. +\ifodd\vithesis \copyrightnoticetext{\copyright\ \@author, +\uppercase\expandafter{\romannumeral\@degreeyear}. All rights reserved.\par\permission} +%% or just +%%\@degreeyear}} +\typeout{Copyright given to author, + permission to copy/distribute given to MIT.} +\else \typeout{Thesis document copyright MIT unless otherwise (manually) specified} +\fi + +\def\thesisdate#1{\gdef\@thesisdate{#1}} + +% typically just a month and year +\def\degreemonth#1{\gdef\@degreemonth{#1}} +\def\degreeyear#1{\gdef\@degreeyear{#1}} + +% Usage: \supervisor{name}{title} +% \chairman{name}{title} + +% since there can be more than one supervisor, +% we build the appropriate boxes for the titlepage and +% the abstractpage as the user makes multiple calls +% to \supervisor +\newbox\@titlesupervisor \newbox\@abstractsupervisor + +\def\supervisor#1#2{\setbox\@titlesupervisor\vbox + {\unvbox\@titlesupervisor \vskip 10pt% plus 1fil minus 1fil + \def\baselinestretch{1}\large + \signature{Certified by}{#1 \\ #2 \\ Thesis Supervisor}} + \setbox\@abstractsupervisor\vbox{\unvbox\@abstractsupervisor + \vskip\baselineskip \def\baselinestretch{1}\@normalsize + \par\noindent Thesis Supervisor: #1 \\ Title: #2}} + +% department chairman, not thesis committee chairman +\def\chairman#1#2{\gdef\@chairmanname{#1}\gdef\@chairmantitle{#2}} + +%% `upcase' documentclass option: \choosecase is defined either as a dummy or +%% a macro to change the (expanded) argument to uppercase. +\def\maketitle{\begin{titlepage} +\large +{\def\baselinestretch{1.2}\Large\bf \choosecase{\@title} \par} +by\par +{\Large \choosecase{\@author}} +\par +\@prevdegrees +\par +\choosecase{Submitted to the} \choosecase{\@department} \\ +\choosecase{in partial fulfillment of the requirements for the} +\choosecase{\@degreeword} +\choosecase{of} +\par +\choosecase{\@degree} +\par +at the +\par\MIT\par +\@degreemonth\ \@degreeyear +\par +\@copyrightnotice +\par +\vskip 3\baselineskip +\signature{Author}{\@department \\ \@thesisdate} +\par +\vfill +\unvbox\@titlesupervisor +\par +\vfill +\signature{Accepted by}{\@chairmanname \\ \@chairmantitle} +\vfill +\end{titlepage}} + +% this environment should probably be called abstract, +% but we want people to also be able to get at the more +% basic abstract environment +\def\abstractpage{\cleardoublepage +\begin{center}{\large{\bf \@title} \\ +by \\ +\@author \\[\baselineskip]} +\par +\def\baselinestretch{1}\@normalsize +Submitted to the \@department \\ +on \@thesisdate, in partial fulfillment of the \\ +requirements for the \@degreeword\ of \\ +\@degree +\end{center} +\par +\begin{abstract}} + +%% Changed from \unvbox to \unvcopy for use with multiple copies of abstract +%% page. +%% Krishna Sethuraman (1990) +\def\endabstractpage{\end{abstract}\noindent + \unvcopy\@abstractsupervisor \newpage} + +%% This counter is used to save the page number for the second copy of +%% the abstract. +\newcounter{savepage} + +% You can use the titlepage environment to do it all yourself if you +% don't want to use \maketitle. If the titlepage environment, the +% paragraph skip is infinitely stretchable, so if you leave a blank line +% between lines that you want space between, the space will stretch so +% that the title page fills up the entire page. +\def\titlepage{\cleardoublepage\centering + \thispagestyle{empty} + \parindent 0pt \parskip 10pt plus 1fil minus 1fil + \def\baselinestretch{1}\@normalsize\vbox to \vsize\bgroup\vbox to 9in\bgroup} +% The \kern0pt pushes any depth into the height. Thanks to Richard Stone. +\def\endtitlepage{\par\kern 0pt\egroup\vss\egroup\newpage} + +\def\MIT{MASSACHUSETTS INSTITUTE OF TECHNOLOGY} +\def\Mit{Massachusetts Institute of Technology} + +\def\permission{\par\noindent{\centering + The author hereby grants to MIT permission to reproduce and to + distribute publicly paper and electronic copies of this thesis + document in whole or in part in any medium now known or hereafter + created.}\par} + +\def\signature#1#2{\par\noindent#1\dotfill\null\\* + {\raggedleft #2\par}} + +\def\abstract{\subsection*{Abstract}\small\def\baselinestretch{1}\@normalsize} +\def\endabstract{\par} + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/sample.org --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/sample.org Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,7 @@ +#+TITLE: asdhfklasdfkljasdf +#+AUTHOR: asdhfkjasdhfkljdasf + +* Section one +asdfasdfasdf +* Another section +aqghowahaoshfwhowehorwer \ No newline at end of file diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/sample.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/sample.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,40 @@ +% Created 2014-03-20 Thu 23:12 +\documentclass[11pt]{article} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{fixltx2e} +\usepackage{graphicx} +\usepackage{longtable} +\usepackage{float} +\usepackage{wrapfig} +\usepackage{rotating} +\usepackage[normalem]{ulem} +\usepackage{amsmath} +\usepackage{textcomp} +\usepackage{marvosym} +\usepackage{wasysym} +\usepackage{amssymb} +\usepackage{hyperref} +\tolerance=1000 +\author{asdhfkjasdhfkljdasf} +\date{\today} +\title{asdhfklasdfkljasdf} +\hypersetup{ + pdfkeywords={}, + pdfsubject={}, + pdfcreator={Emacs 24.2.1 (Org mode 8.2.5h)}} +\begin{document} + +\maketitle +\tableofcontents + + +\section{Section one} +\label{sec-1} +asdfasdfasdf + +\section{Another section} +\label{sec-2} +aqghowahaoshfwhowehorwer +% Emacs 24.2.1 (Org mode 8.2.5h) +\end{document} \ No newline at end of file diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/signature.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/mitthesis/signature.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,31 @@ +% -*- Mode:TeX -*- +% +% Some departments (e.g. Chemistry) require an additional cover page +% with signatures of the thesis committee. Please check with your +% thesis advisor or other appropriate person to determine if such a +% page is required for your thesis. +% +% If you choose not to use the "titlepage" environment, a \newpage +% commands, and several \vspace{\fill} commands may be necessary to +% achieve the required spacing. The \signature command is defined in +% the "mitthesis" class +% +% The following sample appears courtesy of Ben Kaduk and +% was used in his June 2012 doctoral thesis in Chemistry. + +\begin{titlepage} +\begin{large} +This doctoral thesis has been examined by a Committee of the Department +of Chemistry as follows: + +\signature{Professor Jianshu Cao}{Chairman, Thesis Committee \\ + Professor of Chemistry} + +\signature{Professor Troy Van Voorhis}{Thesis Supervisor \\ + Associate Professor of Chemistry} + +\signature{Professor Robert W. Field}{Member, Thesis Committee \\ + Haslam and Dewey Professor of Chemistry} +\end{large} +\end{titlepage} + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/mitthesis/templates.zip Binary file thesis/aux/mitthesis/templates.zip has changed diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/org/first-chapter.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/org/first-chapter.html Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,455 @@ + + + + +<code>CORTEX</code> + + + + + + + + + + + + + + + +
+

CORTEX

+ + +
+
+ +
+ +

aurellem

+ +
+ +
Written by Robert McIntyre
+ + + + + + + +
+

Artificial Imagination

+
+ + +

+ Imagine watching a video of someone skateboarding. When you watch + the video, you can imagine yourself skateboarding, and your + knowledge of the human body and its dynamics guides your + interpretation of the scene. For example, even if the skateboarder + is partially occluded, you can infer the positions of his arms and + body from your own knowledge of how your body would be positioned if + you were skateboarding. If the skateboarder suffers an accident, you + wince in sympathy, imagining the pain your own body would experience + if it were in the same situation. This empathy with other people + guides our understanding of whatever they are doing because it is a + powerful constraint on what is probable and possible. In order to + make use of this powerful empathy constraint, I need a system that + can generate and make sense of sensory data from the many different + senses that humans possess. The two key proprieties of such a system + are embodiment and imagination. +

+ +
+ +
+

What is imagination?

+
+ + +

+ One kind of imagination is sympathetic imagination: you imagine + yourself in the position of something/someone you are + observing. This type of imagination comes into play when you follow + along visually when watching someone perform actions, or when you + sympathetically grimace when someone hurts themselves. This type of + imagination uses the constraints you have learned about your own + body to highly constrain the possibilities in whatever you are + seeing. It uses all your senses to including your senses of touch, + proprioception, etc. Humans are flexible when it comes to "putting + themselves in another's shoes," and can sympathetically understand + not only other humans, but entities ranging animals to cartoon + characters to single dots on a screen! +

+

+ Another kind of imagination is predictive imagination: you + construct scenes in your mind that are not entirely related to + whatever you are observing, but instead are predictions of the + future or simply flights of fancy. You use this type of imagination + to plan out multi-step actions, or play out dangerous situations in + your mind so as to avoid messing them up in reality. +

+

+ Of course, sympathetic and predictive imagination blend into each + other and are not completely separate concepts. One dimension along + which you can distinguish types of imagination is dependence on raw + sense data. Sympathetic imagination is highly constrained by your + senses, while predictive imagination can be more or less dependent + on your senses depending on how far ahead you imagine. Daydreaming + is an extreme form of predictive imagination that wanders through + different possibilities without concern for whether they are + related to whatever is happening in reality. +

+

+ For this thesis, I will mostly focus on sympathetic imagination and + the constraint it provides for understanding sensory data. +

+
+ +
+ +
+

What problems can imagination solve?

+
+ + +

+ Consider a video of a cat drinking some water. +

+ +
+

../images/cat-drinking.jpg

+

A cat drinking some water. Identifying this action is beyond the state of the art for computers.

+
+ +

+ It is currently impossible for any computer program to reliably + label such an video as "drinking". I think humans are able to label + such video as "drinking" because they imagine themselves as the + cat, and imagine putting their face up against a stream of water + and sticking out their tongue. In that imagined world, they can + feel the cool water hitting their tongue, and feel the water + entering their body, and are able to recognize that feeling as + drinking. So, the label of the action is not really in the pixels + of the image, but is found clearly in a simulation inspired by + those pixels. An imaginative system, having been trained on + drinking and non-drinking examples and learning that the most + important component of drinking is the feeling of water sliding + down one's throat, would analyze a video of a cat drinking in the + following manner: +

+
    +
  • Create a physical model of the video by putting a "fuzzy" model + of its own body in place of the cat. Also, create a simulation of + the stream of water. + +
  • +
  • Play out this simulated scene and generate imagined sensory + experience. This will include relevant muscle contractions, a + close up view of the stream from the cat's perspective, and most + importantly, the imagined feeling of water entering the mouth. + +
  • +
  • The action is now easily identified as drinking by the sense of + taste alone. The other senses (such as the tongue moving in and + out) help to give plausibility to the simulated action. Note that + the sense of vision, while critical in creating the simulation, + is not critical for identifying the action from the simulation. +
  • +
+ + +

+ More generally, I expect imaginative systems to be particularly + good at identifying embodied actions in videos. +

+
+
+ +
+ +
+

Cortex

+
+ + +

+ The previous example involves liquids, the sense of taste, and + imagining oneself as a cat. For this thesis I constrain myself to + simpler, more easily digitizable senses and situations. +

+

+ My system, Cortex performs imagination in two different simplified + worlds: worm world and stick figure world. In each of these + worlds, entities capable of imagination recognize actions by + simulating the experience from their own perspective, and then + recognizing the action from a database of examples. +

+

+ In order to serve as a framework for experiments in imagination, + Cortex requires simulated bodies, worlds, and senses like vision, + hearing, touch, proprioception, etc. +

+ +
+ +
+

A Video Game Engine takes care of some of the groundwork

+
+ + +

+ When it comes to simulation environments, the engines used to + create the worlds in video games offer top-notch physics and + graphics support. These engines also have limited support for + creating cameras and rendering 3D sound, which can be repurposed + for vision and hearing respectively. Physics collision detection + can be expanded to create a sense of touch. +

+

+ jMonkeyEngine3 is one such engine for creating video games in + Java. It uses OpenGL to render to the screen and uses screengraphs + to avoid drawing things that do not appear on the screen. It has an + active community and several games in the pipeline. The engine was + not built to serve any particular game but is instead meant to be + used for any 3D game. I chose jMonkeyEngine3 it because it had the + most features out of all the open projects I looked at, and because + I could then write my code in Clojure, an implementation of LISP + that runs on the JVM. +

+
+ +
+ +
+

CORTEX Extends jMonkeyEngine3 to implement rich senses

+
+ + +

+ Using the game-making primitives provided by jMonkeyEngine3, I have + constructed every major human sense except for smell and + taste. Cortex also provides an interface for creating creatures + in Blender, a 3D modeling environment, and then "rigging" the + creatures with senses using 3D annotations in Blender. A creature + can have any number of senses, and there can be any number of + creatures in a simulation. +

+

+ The senses available in Cortex are: +

+ + + +
+
+ +
+ +
+

A roadmap for Cortex experiments

+
+ + + +
+ +
+

Worm World

+
+ + +

+ Worms in Cortex are segmented creatures which vary in length and + number of segments, and have the senses of vision, proprioception, + touch, and muscle tension. +

+ +
+

../images/finger-UV.png

+

This is the tactile-sensor-profile for the upper segment of a worm. It defines regions of high touch sensitivity (where there are many white pixels) and regions of low sensitivity (where white pixels are sparse).

+
+ + + + +
+
+ +
YouTube +
+

The worm responds to touch.

+
+ +
+
+ +
YouTube +
+

Proprioception in a worm. The proprioceptive readout is + in the upper left corner of the screen.

+
+ +

+ A worm is trained in various actions such as sinusoidal movement, + curling, flailing, and spinning by directly playing motor + contractions while the worm "feels" the experience. These actions + are recorded both as vectors of muscle tension, touch, and + proprioceptive data, but also in higher level forms such as + frequencies of the various contractions and a symbolic name for the + action. +

+

+ Then, the worm watches a video of another worm performing one of + the actions, and must judge which action was performed. Normally + this would be an extremely difficult problem, but the worm is able + to greatly diminish the search space through sympathetic + imagination. First, it creates an imagined copy of its body which + it observes from a third person point of view. Then for each frame + of the video, it maneuvers its simulated body to be in registration + with the worm depicted in the video. The physical constraints + imposed by the physics simulation greatly decrease the number of + poses that have to be tried, making the search feasible. As the + imaginary worm moves, it generates imaginary muscle tension and + proprioceptive sensations. The worm determines the action not by + vision, but by matching the imagined proprioceptive data with + previous examples. +

+

+ By using non-visual sensory data such as touch, the worms can also + answer body related questions such as "did your head touch your + tail?" and "did worm A touch worm B?" +

+

+ The proprioceptive information used for action identification is + body-centric, so only the registration step is dependent on point + of view, not the identification step. Registration is not specific + to any particular action. Thus, action identification can be + divided into a point-of-view dependent generic registration step, + and a action-specific step that is body-centered and invariant to + point of view. +

+
+ +
+ +
+

Stick Figure World

+
+ + +

+ This environment is similar to Worm World, except the creatures are + more complicated and the actions and questions more varied. It is + an experiment to see how far imagination can go in interpreting + actions. +

+
+
+
+ +
+

Date: 2013-11-07 04:21:29 EST

+

Author: Robert McIntyre

+

Org version 7.7 with Emacs version 24

+Validate XHTML 1.0 + +
+ + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/org/first-chapter.org --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/org/first-chapter.org Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,238 @@ +#+title: =CORTEX= +#+author: Robert McIntyre +#+email: rlm@mit.edu +#+description: Using embodied AI to facilitate Artificial Imagination. +#+keywords: AI, clojure, embodiment +#+SETUPFILE: ../../aurellem/org/setup.org +#+INCLUDE: ../../aurellem/org/level-0.org +#+babel: :mkdirp yes :noweb yes :exports both +#+OPTIONS: toc:nil, num:nil + +* Artificial Imagination + + Imagine watching a video of someone skateboarding. When you watch + the video, you can imagine yourself skateboarding, and your + knowledge of the human body and its dynamics guides your + interpretation of the scene. For example, even if the skateboarder + is partially occluded, you can infer the positions of his arms and + body from your own knowledge of how your body would be positioned if + you were skateboarding. If the skateboarder suffers an accident, you + wince in sympathy, imagining the pain your own body would experience + if it were in the same situation. This empathy with other people + guides our understanding of whatever they are doing because it is a + powerful constraint on what is probable and possible. In order to + make use of this powerful empathy constraint, I need a system that + can generate and make sense of sensory data from the many different + senses that humans possess. The two key proprieties of such a system + are /embodiment/ and /imagination/. + +** What is imagination? + + One kind of imagination is /sympathetic/ imagination: you imagine + yourself in the position of something/someone you are + observing. This type of imagination comes into play when you follow + along visually when watching someone perform actions, or when you + sympathetically grimace when someone hurts themselves. This type of + imagination uses the constraints you have learned about your own + body to highly constrain the possibilities in whatever you are + seeing. It uses all your senses to including your senses of touch, + proprioception, etc. Humans are flexible when it comes to "putting + themselves in another's shoes," and can sympathetically understand + not only other humans, but entities ranging from animals to cartoon + characters to [[http://www.youtube.com/watch?v=0jz4HcwTQmU][single dots]] on a screen! + + Another kind of imagination is /predictive/ imagination: you + construct scenes in your mind that are not entirely related to + whatever you are observing, but instead are predictions of the + future or simply flights of fancy. You use this type of imagination + to plan out multi-step actions, or play out dangerous situations in + your mind so as to avoid messing them up in reality. + + Of course, sympathetic and predictive imagination blend into each + other and are not completely separate concepts. One dimension along + which you can distinguish types of imagination is dependence on raw + sense data. Sympathetic imagination is highly constrained by your + senses, while predictive imagination can be more or less dependent + on your senses depending on how far ahead you imagine. Daydreaming + is an extreme form of predictive imagination that wanders through + different possibilities without concern for whether they are + related to whatever is happening in reality. + + For this thesis, I will mostly focus on sympathetic imagination and + the constraint it provides for understanding sensory data. + +** What problems can imagination solve? + + Consider a video of a cat drinking some water. + + #+caption: A cat drinking some water. Identifying this action is beyond the state of the art for computers. + #+ATTR_LaTeX: width=5cm + [[../images/cat-drinking.jpg]] + + It is currently impossible for any computer program to reliably + label such an video as "drinking". I think humans are able to label + such video as "drinking" because they imagine /themselves/ as the + cat, and imagine putting their face up against a stream of water + and sticking out their tongue. In that imagined world, they can + feel the cool water hitting their tongue, and feel the water + entering their body, and are able to recognize that /feeling/ as + drinking. So, the label of the action is not really in the pixels + of the image, but is found clearly in a simulation inspired by + those pixels. An imaginative system, having been trained on + drinking and non-drinking examples and learning that the most + important component of drinking is the feeling of water sliding + down one's throat, would analyze a video of a cat drinking in the + following manner: + + - Create a physical model of the video by putting a "fuzzy" model + of its own body in place of the cat. Also, create a simulation of + the stream of water. + + - Play out this simulated scene and generate imagined sensory + experience. This will include relevant muscle contractions, a + close up view of the stream from the cat's perspective, and most + importantly, the imagined feeling of water entering the mouth. + + - The action is now easily identified as drinking by the sense of + taste alone. The other senses (such as the tongue moving in and + out) help to give plausibility to the simulated action. Note that + the sense of vision, while critical in creating the simulation, + is not critical for identifying the action from the simulation. + + More generally, I expect imaginative systems to be particularly + good at identifying embodied actions in videos. + +* Cortex + + The previous example involves liquids, the sense of taste, and + imagining oneself as a cat. For this thesis I constrain myself to + simpler, more easily digitizable senses and situations. + + My system, =CORTEX= performs imagination in two different simplified + worlds: /worm world/ and /stick-figure world/. In each of these + worlds, entities capable of imagination recognize actions by + simulating the experience from their own perspective, and then + recognizing the action from a database of examples. + + In order to serve as a framework for experiments in imagination, + =CORTEX= requires simulated bodies, worlds, and senses like vision, + hearing, touch, proprioception, etc. + +** A Video Game Engine takes care of some of the groundwork + + When it comes to simulation environments, the engines used to + create the worlds in video games offer top-notch physics and + graphics support. These engines also have limited support for + creating cameras and rendering 3D sound, which can be repurposed + for vision and hearing respectively. Physics collision detection + can be expanded to create a sense of touch. + + jMonkeyEngine3 is one such engine for creating video games in + Java. It uses OpenGL to render to the screen and uses screengraphs + to avoid drawing things that do not appear on the screen. It has an + active community and several games in the pipeline. The engine was + not built to serve any particular game but is instead meant to be + used for any 3D game. I chose jMonkeyEngine3 it because it had the + most features out of all the open projects I looked at, and because + I could then write my code in Clojure, an implementation of LISP + that runs on the JVM. + +** =CORTEX= Extends jMonkeyEngine3 to implement rich senses + + Using the game-making primitives provided by jMonkeyEngine3, I have + constructed every major human sense except for smell and + taste. =CORTEX= also provides an interface for creating creatures + in Blender, a 3D modeling environment, and then "rigging" the + creatures with senses using 3D annotations in Blender. A creature + can have any number of senses, and there can be any number of + creatures in a simulation. + + The senses available in =CORTEX= are: + + - [[../../cortex/html/vision.html][Vision]] + - [[../../cortex/html/hearing.html][Hearing]] + - [[../../cortex/html/touch.html][Touch]] + - [[../../cortex/html/proprioception.html][Proprioception]] + - [[../../cortex/html/movement.html][Muscle Tension]] + +* A roadmap for =CORTEX= experiments + +** Worm World + + Worms in =CORTEX= are segmented creatures which vary in length and + number of segments, and have the senses of vision, proprioception, + touch, and muscle tension. + +#+attr_html: width=755 +#+caption: This is the tactile-sensor-profile for the upper segment of a worm. It defines regions of high touch sensitivity (where there are many white pixels) and regions of low sensitivity (where white pixels are sparse). +[[../images/finger-UV.png]] + + +#+begin_html +
+
+ +
YouTube +
+

The worm responds to touch.

+
+#+end_html + +#+begin_html +
+
+ +
YouTube +
+

Proprioception in a worm. The proprioceptive readout is + in the upper left corner of the screen.

+
+#+end_html + + A worm is trained in various actions such as sinusoidal movement, + curling, flailing, and spinning by directly playing motor + contractions while the worm "feels" the experience. These actions + are recorded both as vectors of muscle tension, touch, and + proprioceptive data, but also in higher level forms such as + frequencies of the various contractions and a symbolic name for the + action. + + Then, the worm watches a video of another worm performing one of + the actions, and must judge which action was performed. Normally + this would be an extremely difficult problem, but the worm is able + to greatly diminish the search space through sympathetic + imagination. First, it creates an imagined copy of its body which + it observes from a third person point of view. Then for each frame + of the video, it maneuvers its simulated body to be in registration + with the worm depicted in the video. The physical constraints + imposed by the physics simulation greatly decrease the number of + poses that have to be tried, making the search feasible. As the + imaginary worm moves, it generates imaginary muscle tension and + proprioceptive sensations. The worm determines the action not by + vision, but by matching the imagined proprioceptive data with + previous examples. + + By using non-visual sensory data such as touch, the worms can also + answer body related questions such as "did your head touch your + tail?" and "did worm A touch worm B?" + + The proprioceptive information used for action identification is + body-centric, so only the registration step is dependent on point + of view, not the identification step. Registration is not specific + to any particular action. Thus, action identification can be + divided into a point-of-view dependent generic registration step, + and a action-specific step that is body-centered and invariant to + point of view. + +** Stick Figure World + + This environment is similar to Worm World, except the creatures are + more complicated and the actions and questions more varied. It is + an experiment to see how far imagination can go in interpreting + actions. diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/aux/org/roadmap.org --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/aux/org/roadmap.org Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,220 @@ +In order for this to be a reasonable thesis that I can be proud of, +what are the /minimum/ number of things I need to get done? + + +* worm OR hand registration + - training from a few examples (2 to start out) + - aligning the body with the scene + - generating sensory data + - matching previous labeled examples using dot-products or some + other basic thing + - showing that it works with different views + +* first draft + - draft of thesis without bibliography or formatting + - should have basic experiment and have full description of + framework with code + - review with Winston + +* final draft + - implement stretch goals from Winston if possible + - complete final formatting and submit + +* CORTEX + DEADLINE: <2014-05-09 Fri> + SHIT THAT'S IN 67 DAYS!!! + +** program simple feature matching code for the worm's segments + +Subgoals: +*** DONE Get cortex working again, run tests, no jmonkeyengine updates + CLOSED: [2014-03-03 Mon 22:07] SCHEDULED: <2014-03-03 Mon> +*** DONE get blender working again + CLOSED: [2014-03-03 Mon 22:43] SCHEDULED: <2014-03-03 Mon> +*** DONE make sparce touch worm segment in blender + CLOSED: [2014-03-03 Mon 23:16] SCHEDULED: <2014-03-03 Mon> + CLOCK: [2014-03-03 Mon 22:44]--[2014-03-03 Mon 23:16] => 0:32 +*** DONE make multi-segment touch worm with touch sensors and display + CLOSED: [2014-03-03 Mon 23:54] SCHEDULED: <2014-03-03 Mon> + +*** DONE Make a worm wiggle and curl + CLOSED: [2014-03-04 Tue 23:03] SCHEDULED: <2014-03-04 Tue> + + +** First draft + +Subgoals: +*** Writeup new worm experiments. +*** Triage implementation code and get it into chapter form. + + + + + +** for today + +- guided worm :: control the worm with the keyboard. Useful for + testing the body-centered recog scripts, and for + preparing a cool demo video. + +- body-centered recognition :: detect actions using hard coded + body-centered scripts. + +- cool demo video of the worm being moved and recognizing things :: + will be a neat part of the thesis. + +- thesis export :: refactoring and organization of code so that it + spits out a thesis in addition to the web page. + +- video alignment :: analyze the frames of a video in order to align + the worm. Requires body-centered recognition. Can "cheat". + +- smoother actions :: use debugging controls to directly influence the + demo actions, and to generate recoginition procedures. + +- degenerate video demonstration :: show the system recognizing a + curled worm from dead on. Crowning achievement of thesis. + +** Ordered from easiest to hardest + +Just report the positions of everything. I don't think that this +necessairly shows anything usefull. + +Worm-segment vision -- you initialize a view of the worm, but instead +of pixels you use labels via ray tracing. Has the advantage of still +allowing for visual occlusion, but reliably identifies the objects, +even without rainbow coloring. You can code this as an image. + +Same as above, except just with worm/non-worm labels. + +Color code each worm segment and then recognize them using blob +detectors. Then you solve for the perspective and the action +simultaneously. + +The entire worm can be colored the same, high contrast color against a +nearly black background. + +"Rooted" vision. You give the exact coordinates of ONE piece of the +worm, but the algorithm figures out the rest. + +More rooted vision -- start off the entire worm with one posistion. + +The right way to do alignment is to use motion over multiple frames to +snap individual pieces of the model into place sharing and +propragating the individual alignments over the whole model. We also +want to limit the alignment search to just those actions we are +prepared to identify. This might mean that I need some small "micro +actions" such as the individual movements of the worm pieces. + +Get just the centers of each segment projected onto the imaging +plane. (best so far). + + +Repertoire of actions + video frames --> + directed multi-frame-search alg + + + + + + +!! Could also have a bounding box around the worm provided by +filtering the worm/non-worm render, and use bbbgs. As a bonus, I get +to include bbbgs in my thesis! Could finally do that recursive things +where I make bounding boxes be those things that give results that +give good bounding boxes. If I did this I could use a disruptive +pattern on the worm. + +Re imagining using default textures is very simple for this system, +but hard for others. + + +Want to demonstrate, at minimum, alignment of some model of the worm +to the video, and a lookup of the action by simulated perception. + +note: the purple/white points is a very beautiful texture, because +when it moves slightly, the white dots look like they're +twinkling. Would look even better if it was a darker purple. Also +would look better more spread out. + + +embed assumption of one frame of view, search by moving around in +simulated world. + +Allowed to limit search by setting limits to a hemisphere around the +imagined worm! This limits scale also. + + + + + +!! Limited search with worm/non-worm rendering. +How much inverse kinematics do we have to do? +What about cached (allowed state-space) paths, derived from labeled +training. You have to lead from one to another. + +What about initial state? Could start the input videos at a specific +state, then just match that explicitly. + +!! The training doesn't have to be labeled -- you can just move around +for a while!! + +!! Limited search with motion based alignment. + + + + +"play arounds" can establish a chain of linked sensoriums. Future +matches must fall into one of the already experienced things, and once +they do, it greatly limits the things that are possible in the future. + + +frame differences help to detect muscle exertion. + +Can try to match on a few "representative" frames. Can also just have +a few "bodies" in various states which we try to match. + + + +Paths through state-space have the exact same signature as +simulation. BUT, these can be searched in parallel and don't interfere +with each other. + + + + +** Final stretch up to First Draft + +*** DONE complete debug control of worm + CLOSED: [2014-03-17 Mon 17:29] SCHEDULED: <2014-03-17 Mon> + CLOCK: [2014-03-17 Mon 14:01]--[2014-03-17 Mon 17:29] => 3:28 +*** DONE add phi-space output to debug control + CLOSED: [2014-03-17 Mon 17:42] SCHEDULED: <2014-03-17 Mon> + CLOCK: [2014-03-17 Mon 17:31]--[2014-03-17 Mon 17:42] => 0:11 + +*** DONE complete automatic touch partitioning + CLOSED: [2014-03-18 Tue 21:43] SCHEDULED: <2014-03-18 Tue> +*** DONE complete cyclic predicate + CLOSED: [2014-03-19 Wed 16:34] SCHEDULED: <2014-03-18 Tue> + CLOCK: [2014-03-19 Wed 13:16]--[2014-03-19 Wed 16:34] => 3:18 +*** DONE complete three phi-stream action predicatates; test them with debug control + CLOSED: [2014-03-19 Wed 16:35] SCHEDULED: <2014-03-17 Mon> + CLOCK: [2014-03-18 Tue 18:36]--[2014-03-18 Tue 21:43] => 3:07 + CLOCK: [2014-03-18 Tue 18:34]--[2014-03-18 Tue 18:36] => 0:02 + CLOCK: [2014-03-17 Mon 19:19]--[2014-03-17 Mon 21:19] => 2:00 +*** DONE build an automatic "do all the things" sequence. + CLOSED: [2014-03-19 Wed 16:55] SCHEDULED: <2014-03-19 Wed> + CLOCK: [2014-03-19 Wed 16:53]--[2014-03-19 Wed 16:55] => 0:02 +*** DONE implement proprioception based movement lookup in phi-space + CLOSED: [2014-03-19 Wed 22:04] SCHEDULED: <2014-03-19 Wed> + CLOCK: [2014-03-19 Wed 19:32]--[2014-03-19 Wed 22:04] => 2:32 +*** DONE make proprioception reference phi-space indexes + CLOSED: [2014-03-19 Wed 22:47] SCHEDULED: <2014-03-19 Wed> + CLOCK: [2014-03-19 Wed 22:07] + + +*** DONE create test videos, also record positions of worm segments + CLOSED: [2014-03-20 Thu 22:02] SCHEDULED: <2014-03-19 Wed> + +*** TODO Collect intro, worm-learn and cortex creation into draft thesis. + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/cortex.org --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/cortex.org Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,7 @@ +d + + +lol whatevar + +* lol + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/cortex.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/cortex.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,7 @@ +d + + +lol whatevar + +\section{lol} +\label{sec-1} diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/cover.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/cover.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,132 @@ +% -*-latex-*- +% +% For questions, comments, concerns or complaints: +% thesis@mit.edu +% +% +% $Log: cover.tex,v $ +% Revision 1.8 2008/05/13 15:02:15 jdreed +% Degree month is June, not May. Added note about prevdegrees. +% Arthur Smith's title updated +% +% Revision 1.7 2001/02/08 18:53:16 boojum +% changed some \newpages to \cleardoublepages +% +% Revision 1.6 1999/10/21 14:49:31 boojum +% changed comment referring to documentstyle +% +% Revision 1.5 1999/10/21 14:39:04 boojum +% *** empty log message *** +% +% Revision 1.4 1997/04/18 17:54:10 othomas +% added page numbers on abstract and cover, and made 1 abstract +% page the default rather than 2. (anne hunter tells me this +% is the new institute standard.) +% +% Revision 1.4 1997/04/18 17:54:10 othomas +% added page numbers on abstract and cover, and made 1 abstract +% page the default rather than 2. (anne hunter tells me this +% is the new institute standard.) +% +% Revision 1.3 93/05/17 17:06:29 starflt +% Added acknowledgements section (suggested by tompalka) +% +% Revision 1.2 92/04/22 13:13:13 epeisach +% Fixes for 1991 course 6 requirements +% Phrase "and to grant others the right to do so" has been added to +% permission clause +% Second copy of abstract is not counted as separate pages so numbering works +% out +% +% Revision 1.1 92/04/22 13:08:20 epeisach + +% NOTE: +% These templates make an effort to conform to the MIT Thesis specifications, +% however the specifications can change. We recommend that you verify the +% layout of your title page with your thesis advisor and/or the MIT +% Libraries before printing your final copy. +\title{An Optimizing Compiler for Low-Level Floating Point Operations} + +\author{Robert McIntyre} +% If you wish to list your previous degrees on the cover page, use the +% previous degrees command: +% \prevdegrees{A.A., Harvard University (1985)} +% You can use the \\ command to list multiple previous degrees +% \prevdegrees{B.S., University of California (1978) \\ +% S.M., Massachusetts Institute of Technology (1981)} +\department{Department of Electrical Engineering and Computer Science} + +% If the thesis is for two degrees simultaneously, list them both +% separated by \and like this: +% \degree{Doctor of Philosophy \and Master of Science} +\degree{Bachelor of Science in Computer Science and Engineering} + +% As of the 2007-08 academic year, valid degree months are September, +% February, or June. The default is June. +\degreemonth{June} +\degreeyear{1990} +\thesisdate{May 18, 1990} + +%% By default, the thesis will be copyrighted to MIT. If you need to copyright +%% the thesis to yourself, just specify the `vi' documentclass option. If for +%% some reason you want to exactly specify the copyright notice text, you can +%% use the \copyrightnoticetext command. +%\copyrightnoticetext{\copyright IBM, 1990. Do not open till Xmas.} + +% If there is more than one supervisor, use the \supervisor command +% once for each. +\supervisor{William J. Dally}{Associate Professor} + +% This is the department committee chairman, not the thesis committee +% chairman. You should replace this with your Department's Committee +% Chairman. +\chairman{Arthur C. Smith}{Chairman, Department Committee on Graduate Theses} + +% Make the titlepage based on the above information. If you need +% something special and can't use the standard form, you can specify +% the exact text of the titlepage yourself. Put it in a titlepage +% environment and leave blank lines where you want vertical space. +% The spaces will be adjusted to fill the entire page. The dotted +% lines for the signatures are made with the \signature command. +\maketitle + +% The abstractpage environment sets up everything on the page except +% the text itself. The title and other header material are put at the +% top of the page, and the supervisors are listed at the bottom. A +% new page is begun both before and after. Of course, an abstract may +% be more than one page itself. If you need more control over the +% format of the page, you can use the abstract environment, which puts +% the word "Abstract" at the beginning and single spaces its text. + +%% You can either \input (*not* \include) your abstract file, or you can put +%% the text of the abstract directly between the \begin{abstractpage} and +%% \end{abstractpage} commands. + +% First copy: start a new page, and save the page number. +\cleardoublepage +% Uncomment the next line if you do NOT want a page number on your +% abstract and acknowledgments pages. +\pagestyle{empty} +\setcounter{savepage}{\thepage} +\begin{abstractpage} +\input{abstract} +\end{abstractpage} + +% Additional copy: start a new page, and reset the page number. This way, +% the second copy of the abstract is not counted as separate pages. +% Uncomment the next 6 lines if you need two copies of the abstract +% page. +% \setcounter{page}{\thesavepage} +% \begin{abstractpage} +% \input{abstract} +% \end{abstractpage} + +\cleardoublepage + +\section*{Acknowledgments} + +This is the acknowledgements section. You should replace this with your +own acknowledgements. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -*-latex-*- diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/images/cat-drinking.jpg Binary file thesis/images/cat-drinking.jpg has changed diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/images/finger-UV.png Binary file thesis/images/finger-UV.png has changed diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis.cls --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/mitthesis.cls Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,535 @@ +% $Log: mitthesis.cls,v $ +% Revision 1.9 2012/02/15 15:48:16 jdreed +% Tweak the "permission" statement per the Libraries' specs +% retrieved 15-Feb-2012 +% +% Revision 1.8 2009/07/27 14:23:50 boojum +% added changing draft mark +% +% Revision 1.6 2005/05/13 19:57:40 boojum +% added leftblank option +% +% Revision 1.5 2002/04/18 14:10:08 boojum +% changed doublespace into setspace for 2e compliance +% +% Revision 1.4 2001/02/08 18:57:13 boojum +% turned two newpages into cleardoublepages +% +% Revision 1.3 2000/08/14 14:53:29 boojum +% commented out footheight, which is relevant for drafthead +% +% Revision 1.2 1999/10/21 14:51:33 boojum +% changed references to documentstyle to documentclass in comments +% +% Revision 1.1 1999/10/21 14:39:31 boojum +% Initial revision +% +%Revision 1.7 1998/04/01 20:45:34 othomas +%removed offending phrase ", and to grant others the right to do so" from copyright notice. +% +%Revision 1.6 96/06/26 15:07:29 othomas +%safety checkin. +% +%Revision 1.5 93/06/07 15:38:50 starflt +%Altered 'vi' option copyright wording to comply with new Institute +%Archives requirements and MIT lawyers. +% +%Revision 1.4 92/08/19 16:51:06 lwvanels +%Updated Course 6 title page for new permissions. +% +%Revision 1.3 92/04/23 10:16:15 epeisach +%Fixed comment character in rcs file +% +%Revision 1.2 92/04/22 13:12:02 epeisach +%Fixes for 1991 course 6 requirements +%Phrase "and to grant others the right to do so" has been added to +%permission clause +%Second copy of abstract is not counted as separate pages so numbering works +%out +% +%Revision 1.1 90/05/04 11:45:53 lwvanels +%Initial revision + +% +% LaTeX format for theses at MIT +% Based on "Specifications for Thesis Preparation" + +% `vi' and `upcase' options by Krishna Sethuraman - krishna@athena.mit.edu +% Margins and heading types by Peter Nuth - nuth@ai.mit.edu +% Title and abstract page by Stephen Gildea - gildea@erl.mit.edu +% Look in this directory for example file mitthesis.doc +% Also for propcover.tex - Boilerplate for PHD proposal. + +% To use this style - say something like: +% for dull, boring thesis format: +% \documentclass[12pt]{mitthesis} +% \pagestyle{plain} +% OR for fast drafts: +% \documentclass[11pt,singlespace,draft]{mitthesis} +% \pagestyle{drafthead} +% OR for Tech Reports: +% \documentclass[12pt,twoside]{mitthesis} +% \pagestyle{headings} +% OR +% some other combination... +% +%%%% New options: +% +% Option `twoside': +% Good for producing Tech Reports. +% The default is single-sided printing, which is what M.I.T. wants on the +% thesis document itself. +% +% Option `singlespace': +% Good for drafts. +% Double-spaced theses are the default. +% That is what M.I.T. asks for in the formal specifications. +% +% Note that MIT does not REQUIRE all theses to be double-spaced anymore. +% Someone in the library system said that it's OK to be single-spaced. +% (Regardless of what the specs. say...) +% To get singlespacing in an area - Use the 'singlespace' environment. +% +% Option `draft': +% Puts `overfull' boxes at the end of lines that are too long. +% +% Pagestyle `drafthead': +% Puts the date and the label ``*DRAFT*'' in the footer. +% +%%%%%%%%%% +% +%%%% Parameters to initialize for boilerplate page: +% +% \title{Mixed Circular Cylindrical Shells} +% \author{J. Casey Salas} +% \prevdegrees{B.S., University of California (1978) \\ +% S.M., Massachusetts Institute of Technology (1981)} +% \department{Department of Electrical Engineering and Computer Science} +% \degree{Doctor of Philosophy} +%% If the thesis is for two degrees simultaneously, list them both +%% separated by \and like this: +% \degree{Doctor of Philosophy \and Master of Science} +% \degreemonth{February} +% \degreeyear{1987} +% \thesisdate{December 10, 1986} +%% If the thesis is copyright by the Institute, leave this line out and +%% the standard copyright line will be used instead. +% \copyrightnotice{J. Casey Salas, 1986} +%% If there is more than one supervisor, use the \supervisor command +%% once for each. +% \supervisor{John D. Galli}{Director, Sound Instrument Laboratory} +%% This is the department committee chairman, not the thesis committee chairman +% \chairman{Arthur C. Smith} +% {Chairman, Departmental Committee on Graduate Students} +%% Make the titlepage based on the above information. If you need +%% something special and can't use the standard form, you can specify +%% the exact text of the titlepage yourself. Put it in a titlepage +%% environment and leave blank lines where you want vertical space. +%% The spaces will be adjusted to fill the entire page. The dotted +%% lines for the signatures are made with the \signature command. +% +%% The abstractpage environment sets up everything on the page except +%% the text itself. The title and other header material are put at the +%% top of the page, and the supervisors are listed at the bottom. A +%% new page is begun both before and after. Of course, an abstract may +%% be more than one page itself. If you need more control over the +%% format of the page, you can use the abstract environment, which puts +%% the word "Abstract" at the beginning and single spaces its text. +% +% \begin{abstractpage} +% Abstract goes here. +% \end{abstractpage} +% +%%%%%%%% Newer additions +% +% documentclass options - +% vi For MIT course VI or VIII thesis - will copyright the thesis to +% you while giving MIT permission to copy and distribute it. +% upcase Will put much of the cover page in uppercase, as per the +% example on page 17 of the *Specifications for Thesis +% Preparation*, (revised 1989) +% Also added ``All Rights Reserved'' to default copyright notice. +% +%%%%%%%%%%% +% +% Documentclass options (vi and upcase) and changes to copyright notice +% Copyright (c) 1990, by Krishna Sethuraman. +% +% Pagestyle and header generation +% Copyright (c) 1987, 1988 by Peter Nuth +% +% Original version +% Copyright (c) 1987 by Stephen Gildea +% Permission to copy all or part of this work is granted, provided +% that the copies are not made or distributed for resale, and that +% the copyright notice and this notice are retained. +% +% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO +% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK, +% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS +% FOR ANY PARTICULAR PURPOSE. +%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{mitthesis}[1999/10/20] + +\def\mystretch{1.5} % Double spacing hack +\DeclareOption{doublespace}{} % This is default + % So we do not read this style twice +\DeclareOption{singlespace}{ % If he explicitly wants single spacing + \typeout{Single spaced} + \def\mystretch{1}} + +%% `vi' and `upcase' document style options. Krishna Sethuraman (1990) +\newcount\vithesis +\DeclareOption{vi}{\typeout{Course VI/VIII thesis style.}\advance\vithesis by1} +\vithesis=0 + +\DeclareOption{upcase}{\typeout{Uppercase cover page.} + \gdef\choosecase#1{\uppercase\expandafter{#1}}} +\def\choosecase#1{#1} + +%% leftblank option by Kevin Fu +\newif\if@leftblank \@leftblankfalse + +\DeclareOption{leftblank}{\typeout{Intentionally Leaving Pages Blank} +\@leftblanktrue} + +% Thesis looks much like report +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}} +\ProcessOptions +\LoadClass{report} + +% If the user wants single spacing, set baselinestretch=1. + +\usepackage{setspace} + +% Note - doublespace.sty has some float-related troubles in +% combination with graphics or color, and is not officially compliant +% with 2e. setspace is a replacement which is 2e-compliant. + +% Read the doublespace style that we got from Rochester: +%\input setdoublespace.sty + +\def\baselinestretch{\mystretch} % Double spacing hack + +%%%%%%% Set up margins and formatting params %%% + +% Margins. +% Note we want 1in top margin assuming no header line, so push header +% into 1in margin. +% Draft mode brings the header back down. + +\setlength{\oddsidemargin}{0.25in} % 1.25in left margin +\setlength{\evensidemargin}{0.25in} % 1.25in left margin (even pages) +\setlength{\topmargin}{0.0in} % 1in top margin +\setlength{\textwidth}{6.0in} % 6.0in text - 1.25in rt margin +\setlength{\textheight}{9in} % Body ht for 1in margins +\addtolength{\topmargin}{-\headheight} % No header, so compensate +\addtolength{\topmargin}{-\headsep} % for header height and separation + +% The next two macros compensate page style for headers and footers +% We only need them in page styles that USE headers and footers. + % If we have a header, it must be 1in from top of page. +\def\pulldownheader{ % Shift header down 1in from top + \addtolength{\topmargin}{\headheight} + \addtolength{\topmargin}{\headsep} + \addtolength{\textheight}{-\headheight} + \addtolength{\textheight}{-\headsep} +} + % If we have a footer, put it 1in up from bottom +\def\pullupfooter{ % Shift footer up + \addtolength{\textheight}{-\footskip} +% \addtolength{\textheight}{-\footheight} %footheight doesn't +% exist in 2e +} + +%%%%%%% End of margins and formatting params %%% + +%%%%%%% Fix various header and footer problems %%% + +% Draft mark on the right side of left pages (outside) +% this mark is also the only one visible on single sided. +\newcommand{\draftrmark}{**DRAFT**} +% Draft mark on the left side of right pages (outside) +\newcommand{\draftlmark}{**DRAFT**} % + +% Macros to make changing the Draft easier +\newcommand{\drmark}[1]{\renewcommand{\draftrmark}{#1}} +\newcommand{\dlmark}[1]{\renewcommand{\draftlmark}{#1}} +\newcommand{\dmark}[1]{\drmark{#1}\dlmark{#1}} + +% Format for draft of thesis. Define our own PageStyle - +% Just like headings, but has foot lines with the date and warning + +\if@twoside % If two-sided printing. +\def\ps@drafthead{ + \let\@mkboth\markboth + \def\@oddfoot{\rm \today \hfil \sc \draftrmark} + \def\@evenfoot{\sc \draftlmark \hfil \rm \today } + \def\@evenhead{\rm \thepage\hfil \sl \leftmark} + \def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} + \def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}{}} + \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@ + \thesection. \ \fi ##1}}} + \pulldownheader % Bring header down from edge + \pullupfooter % Bring footer up +} +\else % If one-sided printing. +\def\ps@drafthead{ + \let\@mkboth\markboth + \def\@oddfoot{\rm \today \hfil \sc \draftrmark} + \def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} + \def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}} + \pulldownheader % Bring header down from edge + \pullupfooter % Bring footer up +} +\fi + +% I redefine these formats that were defined in report.sty +% Definition of 'headings' page style +% Note the use of ##1 for parameter of \def\chaptermark inside the +% \def\ps@headings. +% + +\if@twoside % If two-sided printing. +\def\ps@headings{\let\@mkboth\markboth + \def\@oddfoot{} + \def\@evenfoot{} % No feet. + \def\@evenhead{\rm \thepage\hfil \sl \leftmark} % Left heading. + \def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} % Right heading. + \def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}{}} + \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@ + \thesection. \ \fi ##1}}} + \pulldownheader % Bring header down from edge +} +\else % If one-sided printing. +\def\ps@headings{\let\@mkboth\markboth + \def\@oddfoot{} + \def\@evenfoot{} % No feet. + \def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage} % Heading. + \def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}} + \pulldownheader % Bring header down from edge +} +\fi + +% Redefinition of 'myheadings' page style. +% +\def\ps@myheadings{\let\@mkboth\@gobbletwo + \def\@oddfoot{} + \def\@evenfoot{} + \def\sectionmark##1{} + \def\subsectionmark##1{} + \def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox {}} % + \def\@oddhead{\hbox{}\sl\rightmark \hfil \rm\thepage} % + \pulldownheader % Bring header down from edge +} + +% Redefine '/chapter' to always start on an odd page. +% Should make no difference in singleside mode. +% +\if@leftblank +% Prints "THIS PAGE INTENTIONALLY LEFT BLANK" on blank pages. +\def\chapter{\clearpage\ifodd\c@page\else + \hbox{}\par\vfill\centerline% + {THIS PAGE INTENTIONALLY LEFT BLANK}% + \vfill\newpage\fi + \thispagestyle{plain} % Page style of chapter page is 'plain' + \global\@topnum\z@ % Prevents figures from going at top of page. + \@afterindentfalse % Suppresses indent in first paragraph. Change + \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent. +\else +\def\chapter{\cleardoublepage % Starts new page. + \thispagestyle{plain} % Page style of chapter page is 'plain' + \global\@topnum\z@ % Prevents figures from going at top of page. + \@afterindentfalse % Suppresses indent in first paragraph. Change + \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent. +\fi +% If using the report style, use - instead of . in the figure number. +\@ifundefined{thechapter}{}{\def\thefigure{\thechapter-\arabic{figure}}} + + +%%%%%%%%% End of Style parameters %%%% + +% Here's Gildea's Boilerplate Stuff. +% Copyright (c) 1987 by Stephen Gildea +% Permission to copy all or part of this work is granted, provided +% that the copies are not made or distributed for resale, and that +% the copyright notice and this notice are retained. + +%% Define all the pieces that go on the title page and the abstract. + +% \title and \author already exist + +\def\prevdegrees#1{\gdef\@prevdegrees{#1}} +\def\@prevdegrees{} + +\def\department#1{\gdef\@department{#1}} + +% If you are getting two degrees, use \and between the names. +\def\degree#1{\setbox0\hbox{#1} %for side effect of setting \@degreeword + \gdef\@degree{#1}} + +% \and is used inside the \degree argument to separate two degrees +\def\and{\gdef\@degreeword{degrees} \par and \par} +\def\@degreeword{degree} + +% The copyright notice stuff is a tremendous mess. +% +% \@copyrightnotice is used by \maketitle to actually put text on the +% page; it defaults to ``Copyright MIT 19xx. All rights reserved.'' +% \copyrightnoticetext takes an argument and defined \@copyrightnotice +% to that argument. \copyrightnotice takes an argument, and calls +% \copyrightnoticetext with that argument, preceeded by a copyright +% symbol and followed by ``All rights reserved.'' and the standard +% permission notice. +% +% If you use the 'vi' option, \copyrightnoticetext is used to set the +% copyright to ``(C) Your Name, Current Year in Roman Numerals.'' +% followed by the permission notice. + +% If there is no \copyrightnotice command, it is asssumed that MIT +% holds the copyright. This commands adds the copyright symbol to the +% beginning, and puts the standard permission notice below. +%% ``All rights reserved'' added. Krishna Sethuraman (1990) +\def\copyrightnotice#1{\copyrightnoticetext{\copyright\ #1. All rights +reserved.\par\permission}} + +% Occacionally you will need to exactly specify the text of the +% copyright notice. The \copyrightnoticetext command is then useful. +\long\def\copyrightnoticetext#1{\gdef\@copyrightnotice{#1}} +\def\@copyrightnotice{\copyright\ \Mit\ \@degreeyear. All rights reserved.} + +%% `vi' documentclass option: Specifying this option automatically +%% copyrights the thesis to the author and gives MIT permission to copy and +%% distribute the document. If you want, you can still specify +%% \copyrightnotice{stuff} to copyright to someone else, or +%% \copyrightnoticetext{stuff} to specify the exact text of the copyright +%% notice. +\ifodd\vithesis \copyrightnoticetext{\copyright\ \@author, +\uppercase\expandafter{\romannumeral\@degreeyear}. All rights reserved.\par\permission} +%% or just +%%\@degreeyear}} +\typeout{Copyright given to author, + permission to copy/distribute given to MIT.} +\else \typeout{Thesis document copyright MIT unless otherwise (manually) specified} +\fi + +\def\thesisdate#1{\gdef\@thesisdate{#1}} + +% typically just a month and year +\def\degreemonth#1{\gdef\@degreemonth{#1}} +\def\degreeyear#1{\gdef\@degreeyear{#1}} + +% Usage: \supervisor{name}{title} +% \chairman{name}{title} + +% since there can be more than one supervisor, +% we build the appropriate boxes for the titlepage and +% the abstractpage as the user makes multiple calls +% to \supervisor +\newbox\@titlesupervisor \newbox\@abstractsupervisor + +\def\supervisor#1#2{\setbox\@titlesupervisor\vbox + {\unvbox\@titlesupervisor \vskip 10pt% plus 1fil minus 1fil + \def\baselinestretch{1}\large + \signature{Certified by}{#1 \\ #2 \\ Thesis Supervisor}} + \setbox\@abstractsupervisor\vbox{\unvbox\@abstractsupervisor + \vskip\baselineskip \def\baselinestretch{1}\@normalsize + \par\noindent Thesis Supervisor: #1 \\ Title: #2}} + +% department chairman, not thesis committee chairman +\def\chairman#1#2{\gdef\@chairmanname{#1}\gdef\@chairmantitle{#2}} + +%% `upcase' documentclass option: \choosecase is defined either as a dummy or +%% a macro to change the (expanded) argument to uppercase. +\def\maketitle{\begin{titlepage} +\large +{\def\baselinestretch{1.2}\Large\bf \choosecase{\@title} \par} +by\par +{\Large \choosecase{\@author}} +\par +\@prevdegrees +\par +\choosecase{Submitted to the} \choosecase{\@department} \\ +\choosecase{in partial fulfillment of the requirements for the} +\choosecase{\@degreeword} +\choosecase{of} +\par +\choosecase{\@degree} +\par +at the +\par\MIT\par +\@degreemonth\ \@degreeyear +\par +\@copyrightnotice +\par +\vskip 3\baselineskip +\signature{Author}{\@department \\ \@thesisdate} +\par +\vfill +\unvbox\@titlesupervisor +\par +\vfill +\signature{Accepted by}{\@chairmanname \\ \@chairmantitle} +\vfill +\end{titlepage}} + +% this environment should probably be called abstract, +% but we want people to also be able to get at the more +% basic abstract environment +\def\abstractpage{\cleardoublepage +\begin{center}{\large{\bf \@title} \\ +by \\ +\@author \\[\baselineskip]} +\par +\def\baselinestretch{1}\@normalsize +Submitted to the \@department \\ +on \@thesisdate, in partial fulfillment of the \\ +requirements for the \@degreeword\ of \\ +\@degree +\end{center} +\par +\begin{abstract}} + +%% Changed from \unvbox to \unvcopy for use with multiple copies of abstract +%% page. +%% Krishna Sethuraman (1990) +\def\endabstractpage{\end{abstract}\noindent + \unvcopy\@abstractsupervisor \newpage} + +%% This counter is used to save the page number for the second copy of +%% the abstract. +\newcounter{savepage} + +% You can use the titlepage environment to do it all yourself if you +% don't want to use \maketitle. If the titlepage environment, the +% paragraph skip is infinitely stretchable, so if you leave a blank line +% between lines that you want space between, the space will stretch so +% that the title page fills up the entire page. +\def\titlepage{\cleardoublepage\centering + \thispagestyle{empty} + \parindent 0pt \parskip 10pt plus 1fil minus 1fil + \def\baselinestretch{1}\@normalsize\vbox to \vsize\bgroup\vbox to 9in\bgroup} +% The \kern0pt pushes any depth into the height. Thanks to Richard Stone. +\def\endtitlepage{\par\kern 0pt\egroup\vss\egroup\newpage} + +\def\MIT{MASSACHUSETTS INSTITUTE OF TECHNOLOGY} +\def\Mit{Massachusetts Institute of Technology} + +\def\permission{\par\noindent{\centering + The author hereby grants to MIT permission to reproduce and to + distribute publicly paper and electronic copies of this thesis + document in whole or in part in any medium now known or hereafter + created.}\par} + +\def\signature#1#2{\par\noindent#1\dotfill\null\\* + {\raggedleft #2\par}} + +\def\abstract{\subsection*{Abstract}\small\def\baselinestretch{1}\@normalsize} +\def\endabstract{\par} + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/README.bibliography --- a/thesis/mitthesis/README.bibliography Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -This file gives an overview on what you will need to do to create a -bibliographic database for references, as well as create the actual -bibliography for your thesis. - -You should not need to touch the file biblio.tex. This merely tells -latex to look for the file with the bibliographic info. The file you -want to edit is main.bib. For each entry, use the appropriate style -as designated in the file. - -Citing your references: - -When you cite a reference, you need to use the ``key'' you declare in -main.bib for the entry. No one ever sees the keys, but you'll want to -use something you will easily remember. For instance, if you had an -entry with: - - key=geer1 - -Then you would use \cite{geer1} to reference it within your thesis. - -NOTE: You can not include references in your bibliography that are -never cited in your paper by default. If you need to do this, create a -key for the entry and at the end of your thesis include the line: - -\nocite{key} - -This should be done for every entry which is not explicitly cited. - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/README.main --- a/thesis/mitthesis/README.main Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -This file explains the options available to you for editting the file -main.tex. - -The commands in the this file allow you to specify options such as -spacing, double-sided printing, a draft copy, etc. By default, 12pt -and lgrind are included; lgrind is the 2e style for including code in -your thesis. - -\documentclass[12pt]{mitthesis} -\usepackage{lgrind} -\pagestyle{plain} - -You can add options in the documentclass line as follows: - - o singlespace - - \documentclass[12pt,singlespace]{mitthesis} - - o twoside - - \documentclass[12pt,twoside]{mitthesis} - - o draft (make sure to change the pagestyle to drafthead as - well) - - \documentclass[12pt,draft]{mitthesis} - \usepackage{lgrind} - \pagestyle{drafthead} - - o vi (for course vi and course viii theses) - - \documentclass[12pt,vi]{mitthesis} - -Any options you would use for report.sty will work here as well. - - -You should not need to change the first three lines and last two lines -below. Be sure to include an \include command for each file you are -including in your thesis. - -\include{cover} -\pagestyle{plain} -\include{contents} -\include{chap1} -\include{chap2} -\appendix -\include{appa} -\include{appb} -\include{biblio} -\end{document} - -Comment: to include appendices use a single \appendix command followed by -a number of \include{} commands as many files as needed, each of which -should contain a \chapter{} command for the appendix title. diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/README.text --- a/thesis/mitthesis/README.text Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -This file includes the basic commands you will need to use within each -chapter of your thesis. - -The file chap1.tex is a sample first chapter. To get started, you may -just want to replace the text and commands in that file as needed. In -general though, for each new chapter you want to do the following: - - o Make sure the name has the extension .tex . Otherwise, you - can call it anything you want. For ease of use, all the - examples use chap1, chap2, etc. - - o Add a line to the file main.tex that reads: - - \include{yourfilename} - - This should not include the .tex extension, because latex - assumes that is there. - -Basic syntax: - - o The first line of each chapter should be: - - \chapter{Chapter Title} - - o To start a new section (labeled chap#.sec# -- as in 1.1, - 1.2, etc): - - \section{Section Heading} - - You can also include subsections: - - \subsection{Heading} - - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/abstract.tex --- a/thesis/mitthesis/abstract.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -% $Log: abstract.tex,v $ -% Revision 1.1 93/05/14 14:56:25 starflt -% Initial revision -% -% Revision 1.1 90/05/04 10:41:01 lwvanels -% Initial revision -% -% -%% The text of your abstract and nothing else (other than comments) goes here. -%% It will be single-spaced and the rest of the text that is supposed to go on -%% the abstract page will be generated by the abstractpage environment. This -%% file should be \input (not \include 'd) from cover.tex. -In this thesis, I designed and implemented a compiler which performs -optimizations that reduce the number of low-level floating point operations -necessary for a specific task; this involves the optimization of chains of -floating point operations as well as the implementation of a ``fixed'' point -data type that allows some floating point operations to simulated with integer -arithmetic. The source language of the compiler is a subset of C, and the -destination language is assembly language for a micro-floating point CPU. An -instruction-level simulator of the CPU was written to allow testing of the -code. A series of test pieces of codes was compiled, both with and without -optimization, to determine how effective these optimizations were. diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/appa.tex --- a/thesis/mitthesis/appa.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -\chapter{Tables} - -\begin{table} -\caption{Armadillos} -\label{arm:table} -\begin{center} -\begin{tabular}{||l|l||}\hline -Armadillos & are \\\hline -our & friends \\\hline -\end{tabular} -\end{center} -\end{table} - -\clearpage -\newpage diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/appb.tex --- a/thesis/mitthesis/appb.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -\chapter{Figures} - -\vspace*{-3in} - -\begin{figure} -\vspace{2.4in} -\caption{Armadillo slaying lawyer.} -\label{arm:fig1} -\end{figure} -\clearpage -\newpage - -\begin{figure} -\vspace{2.4in} -\caption{Armadillo eradicating national debt.} -\label{arm:fig2} -\end{figure} -\clearpage -\newpage diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/biblio.tex --- a/thesis/mitthesis/biblio.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -%% This defines the bibliography file (main.bib) and the bibliography style. -%% If you want to create a bibliography file by hand, change the contents of -%% this file to a `thebibliography' environment. For more information -%% see section 4.3 of the LaTeX manual. -\begin{singlespace} -\bibliography{main} -\bibliographystyle{plain} -\end{singlespace} diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/chap1.tex --- a/thesis/mitthesis/chap1.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,250 +0,0 @@ -%% This is an example first chapter. You should put chapter/appendix that you -%% write into a separate file, and add a line \include{yourfilename} to -%% main.tex, where `yourfilename.tex' is the name of the chapter/appendix file. -%% You can process specific files by typing their names in at the -%% \files= -%% prompt when you run the file main.tex through LaTeX. -\chapter{Introduction} - -Micro-optimization is a technique to reduce the overall operation count of -floating point operations. In a standard floating point unit, floating -point operations are fairly high level, such as ``multiply'' and ``add''; -in a micro floating point unit ($\mu$FPU), these have been broken down into -their constituent low-level floating point operations on the mantissas and -exponents of the floating point numbers. - -Chapter two describes the architecture of the $\mu$FPU unit, and the -motivations for the design decisions made. - -Chapter three describes the design of the compiler, as well as how the -optimizations discussed in section~\ref{ch1:opts} were implemented. - -Chapter four describes the purpose of test code that was compiled, and which -statistics were gathered by running it through the simulator. The purpose -is to measure what effect the micro-optimizations had, compared to -unoptimized code. Possible future expansions to the project are also -discussed. - -\section{Motivations for micro-optimization} - -The idea of micro-optimization is motivated by the recent trends in computer -architecture towards low-level parallelism and small, pipelineable -instruction sets \cite{patterson:risc,rad83}. By getting rid of more -complex instructions and concentrating on optimizing frequently used -instructions, substantial increases in performance were realized. - -Another important motivation was the trend towards placing more of the -burden of performance on the compiler. Many of the new architectures depend -on an intelligent, optimizing compiler in order to realize anywhere near -their peak performance -\cite{ellis:bulldog,pet87,coutant:precision-compilers}. In these cases, the -compiler not only is responsible for faithfully generating native code to -match the source language, but also must be aware of instruction latencies, -delayed branches, pipeline stages, and a multitude of other factors in order -to generate fast code \cite{gib86}. - -Taking these ideas one step further, it seems that the floating point -operations that are normally single, large instructions can be further broken -down into smaller, simpler, faster instructions, with more control in the -compiler and less in the hardware. This is the idea behind a -micro-optimizing FPU; break the floating point instructions down into their -basic components and use a small, fast implementation, with a large part of -the burden of hardware allocation and optimization shifted towards -compile-time. - -Along with the hardware speedups possible by using a $\mu$FPU, there are -also optimizations that the compiler can perform on the code that is -generated. In a normal sequence of floating point operations, there are -many hidden redundancies that can be eliminated by allowing the compiler to -control the floating point operations down to their lowest level. These -optimizations are described in detail in section~\ref{ch1:opts}. - -\section{Description of micro-optimization}\label{ch1:opts} - -In order to perform a sequence of floating point operations, a normal FPU -performs many redundant internal shifts and normalizations in the process of -performing a sequence of operations. However, if a compiler can -decompose the floating point operations it needs down to the lowest level, -it then can optimize away many of these redundant operations. - -If there is some additional hardware support specifically for -micro-optimization, there are additional optimizations that can be -performed. This hardware support entails extra ``guard bits'' on the -standard floating point formats, to allow several unnormalized operations to -be performed in a row without the loss information\footnote{A description of -the floating point format used is shown in figures~\ref{exponent-format} -and~\ref{mantissa-format}.}. A discussion of the mathematics behind -unnormalized arithmetic is in appendix~\ref{unnorm-math}. - -The optimizations that the compiler can perform fall into several categories: - -\subsection{Post Multiply Normalization} - -When more than two multiplications are performed in a row, the intermediate -normalization of the results between multiplications can be eliminated. -This is because with each multiplication, the mantissa can become -denormalized by at most one bit. If there are guard bits on the mantissas -to prevent bits from ``falling off'' the end during multiplications, the -normalization can be postponed until after a sequence of several -multiplies\footnote{Using unnormalized numbers for math is not a new idea; a -good example of it is the Control Data CDC 6600, designed by Seymour Cray. -\cite{thornton:cdc6600} The CDC 6600 had all of its instructions performing -unnormalized arithmetic, with a separate {\tt NORMALIZE} instruction.}. - -% This is an example of how you would use tgrind to include an example -% of source code; it is commented out in this template since the code -% example file does not exist. To use it, you need to remove the '%' on the -% beginning of the line, and insert your own information in the call. -% -%\tagrind[htbp]{code/pmn.s.tex}{Post Multiply Normalization}{opt:pmn} - -As you can see, the intermediate results can be multiplied together, with no -need for intermediate normalizations due to the guard bit. It is only at -the end of the operation that the normalization must be performed, in order -to get it into a format suitable for storing in memory\footnote{Note that -for purposed of clarity, the pipeline delays were considered to be 0, and -the branches were not delayed.}. - -\subsection{Block Exponent} - -In a unoptimized sequence of additions, the sequence of operations is as -follows for each pair of numbers ($m_1$,$e_1$) and ($m_2$,$e_2$). -\begin{enumerate} - \item Compare $e_1$ and $e_2$. - \item Shift the mantissa associated with the smaller exponent $|e_1-e_2|$ - places to the right. - \item Add $m_1$ and $m_2$. - \item Find the first one in the resulting mantissa. - \item Shift the resulting mantissa so that normalized - \item Adjust the exponent accordingly. -\end{enumerate} - -Out of 6 steps, only one is the actual addition, and the rest are involved -in aligning the mantissas prior to the add, and then normalizing the result -afterward. In the block exponent optimization, the largest mantissa is -found to start with, and all the mantissa's shifted before any additions -take place. Once the mantissas have been shifted, the additions can take -place one after another\footnote{This requires that for n consecutive -additions, there are $\log_{2}n$ high guard bits to prevent overflow. In -the $\mu$FPU, there are 3 guard bits, making up to 8 consecutive additions -possible.}. An example of the Block Exponent optimization on the expression -X = A + B + C is given in figure~\ref{opt:be}. - -% This is an example of how you would use tgrind to include an example -% of source code; it is commented out in this template since the code -% example file does not exist. To use it, you need to remove the '%' on the -% beginning of the line, and insert your own information in the call. -% -%\tgrind[htbp]{code/be.s.tex}{Block Exponent}{opt:be} - -\section{Integer optimizations} - -As well as the floating point optimizations described above, there are -also integer optimizations that can be used in the $\mu$FPU. In concert -with the floating point optimizations, these can provide a significant -speedup. - -\subsection{Conversion to fixed point} - -Integer operations are much faster than floating point operations; if it is -possible to replace floating point operations with fixed point operations, -this would provide a significant increase in speed. - -This conversion can either take place automatically or or based on a -specific request from the programmer. To do this automatically, the -compiler must either be very smart, or play fast and loose with the accuracy -and precision of the programmer's variables. To be ``smart'', the computer -must track the ranges of all the floating point variables through the -program, and then see if there are any potential candidates for conversion -to floating point. This technique is discussed further in -section~\ref{range-tracking}, where it was implemented. - -The other way to do this is to rely on specific hints from the programmer -that a certain value will only assume a specific range, and that only a -specific precision is desired. This is somewhat more taxing on the -programmer, in that he has to know the ranges that his values will take at -declaration time (something normally abstracted away), but it does provide -the opportunity for fine-tuning already working code. - -Potential applications of this would be simulation programs, where the -variable represents some physical quantity; the constraints of the physical -system may provide bounds on the range the variable can take. -\subsection{Small Constant Multiplications} - -One other class of optimizations that can be done is to replace -multiplications by small integer constants into some combination of -additions and shifts. Addition and shifting can be significantly faster -than multiplication. This is done by using some combination of -\begin{eqnarray*} -a_i & = & a_j + a_k \\ -a_i & = & 2a_j + a_k \\ -a_i & = & 4a_j + a_k \\ -a_i & = & 8a_j + a_k \\ -a_i & = & a_j - a_k \\ -a_i & = & a_j \ll m \mbox{shift} -\end{eqnarray*} -instead of the multiplication. For example, to multiply $s$ by 10 and store -the result in $r$, you could use: -\begin{eqnarray*} -r & = & 4s + s\\ -r & = & r + r -\end{eqnarray*} -Or by 59: -\begin{eqnarray*} -t & = & 2s + s \\ -r & = & 2t + s \\ -r & = & 8r + t -\end{eqnarray*} -Similar combinations can be found for almost all of the smaller -integers\footnote{This optimization is only an ``optimization'', of course, -when the amount of time spent on the shifts and adds is less than the time -that would be spent doing the multiplication. Since the time costs of these -operations are known to the compiler in order for it to do scheduling, it is -easy for the compiler to determine when this optimization is worth using.}. -\cite{magenheimer:precision} - -\section{Other optimizations} - -\subsection{Low-level parallelism} - -The current trend is towards duplicating hardware at the lowest level to -provide parallelism\footnote{This can been seen in the i860; floating point -additions and multiplications can proceed at the same time, and the RISC -core be moving data in and out of the floating point registers and providing -flow control at the same time the floating point units are active. \cite{byte:i860}} - -Conceptually, it is easy to take advantage to low-level parallelism in the -instruction stream by simply adding more functional units to the $\mu$FPU, -widening the instruction word to control them, and then scheduling as many -operations to take place at one time as possible. - -However, simply adding more functional units can only be done so many times; -there is only a limited amount of parallelism directly available in the -instruction stream, and without it, much of the extra resources will go to -waste. One process used to make more instructions potentially schedulable -at any given time is ``trace scheduling''. This technique originated in the -Bulldog compiler for the original VLIW machine, the ELI-512. -\cite{ellis:bulldog,colwell:vliw} In trace scheduling, code can be -scheduled through many basic blocks at one time, following a single -potential ``trace'' of program execution. In this way, instructions that -{\em might\/} be executed depending on a conditional branch further down in -the instruction stream are scheduled, allowing an increase in the potential -parallelism. To account for the cases where the expected branch wasn't -taken, correction code is inserted after the branches to undo the effects of -any prematurely executed instructions. - -\subsection{Pipeline optimizations} - -In addition to having operations going on in parallel across functional -units, it is also typical to have several operations in various stages of -completion in each unit. This pipelining allows the throughput of the -functional units to be increased, with no increase in latency. - -There are several ways pipelined operations can be optimized. On the -hardware side, support can be added to allow data to be recirculated back -into the beginning of the pipeline from the end, saving a trip through the -registers. On the software side, the compiler can utilize several tricks to -try to fill up as many of the pipeline delay slots as possible, as -seendescribed by Gibbons. \cite{gib86} - - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/contents.tex --- a/thesis/mitthesis/contents.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ - % -*- Mode:TeX -*- -%% This file simply contains the commands that actually generate the table of -%% contents and lists of figures and tables. You can omit any or all of -%% these files by simply taking out the appropriate command. For more -%% information on these files, see appendix C.3.3 of the LaTeX manual. -\tableofcontents -\newpage -\listoffigures -\newpage -\listoftables - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/cover.tex --- a/thesis/mitthesis/cover.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,132 +0,0 @@ -% -*-latex-*- -% -% For questions, comments, concerns or complaints: -% thesis@mit.edu -% -% -% $Log: cover.tex,v $ -% Revision 1.8 2008/05/13 15:02:15 jdreed -% Degree month is June, not May. Added note about prevdegrees. -% Arthur Smith's title updated -% -% Revision 1.7 2001/02/08 18:53:16 boojum -% changed some \newpages to \cleardoublepages -% -% Revision 1.6 1999/10/21 14:49:31 boojum -% changed comment referring to documentstyle -% -% Revision 1.5 1999/10/21 14:39:04 boojum -% *** empty log message *** -% -% Revision 1.4 1997/04/18 17:54:10 othomas -% added page numbers on abstract and cover, and made 1 abstract -% page the default rather than 2. (anne hunter tells me this -% is the new institute standard.) -% -% Revision 1.4 1997/04/18 17:54:10 othomas -% added page numbers on abstract and cover, and made 1 abstract -% page the default rather than 2. (anne hunter tells me this -% is the new institute standard.) -% -% Revision 1.3 93/05/17 17:06:29 starflt -% Added acknowledgements section (suggested by tompalka) -% -% Revision 1.2 92/04/22 13:13:13 epeisach -% Fixes for 1991 course 6 requirements -% Phrase "and to grant others the right to do so" has been added to -% permission clause -% Second copy of abstract is not counted as separate pages so numbering works -% out -% -% Revision 1.1 92/04/22 13:08:20 epeisach - -% NOTE: -% These templates make an effort to conform to the MIT Thesis specifications, -% however the specifications can change. We recommend that you verify the -% layout of your title page with your thesis advisor and/or the MIT -% Libraries before printing your final copy. -\title{An Optimizing Compiler for Low-Level Floating Point Operations} - -\author{Robert McIntyre} -% If you wish to list your previous degrees on the cover page, use the -% previous degrees command: -% \prevdegrees{A.A., Harvard University (1985)} -% You can use the \\ command to list multiple previous degrees -% \prevdegrees{B.S., University of California (1978) \\ -% S.M., Massachusetts Institute of Technology (1981)} -\department{Department of Electrical Engineering and Computer Science} - -% If the thesis is for two degrees simultaneously, list them both -% separated by \and like this: -% \degree{Doctor of Philosophy \and Master of Science} -\degree{Bachelor of Science in Computer Science and Engineering} - -% As of the 2007-08 academic year, valid degree months are September, -% February, or June. The default is June. -\degreemonth{June} -\degreeyear{1990} -\thesisdate{May 18, 1990} - -%% By default, the thesis will be copyrighted to MIT. If you need to copyright -%% the thesis to yourself, just specify the `vi' documentclass option. If for -%% some reason you want to exactly specify the copyright notice text, you can -%% use the \copyrightnoticetext command. -%\copyrightnoticetext{\copyright IBM, 1990. Do not open till Xmas.} - -% If there is more than one supervisor, use the \supervisor command -% once for each. -\supervisor{William J. Dally}{Associate Professor} - -% This is the department committee chairman, not the thesis committee -% chairman. You should replace this with your Department's Committee -% Chairman. -\chairman{Arthur C. Smith}{Chairman, Department Committee on Graduate Theses} - -% Make the titlepage based on the above information. If you need -% something special and can't use the standard form, you can specify -% the exact text of the titlepage yourself. Put it in a titlepage -% environment and leave blank lines where you want vertical space. -% The spaces will be adjusted to fill the entire page. The dotted -% lines for the signatures are made with the \signature command. -\maketitle - -% The abstractpage environment sets up everything on the page except -% the text itself. The title and other header material are put at the -% top of the page, and the supervisors are listed at the bottom. A -% new page is begun both before and after. Of course, an abstract may -% be more than one page itself. If you need more control over the -% format of the page, you can use the abstract environment, which puts -% the word "Abstract" at the beginning and single spaces its text. - -%% You can either \input (*not* \include) your abstract file, or you can put -%% the text of the abstract directly between the \begin{abstractpage} and -%% \end{abstractpage} commands. - -% First copy: start a new page, and save the page number. -\cleardoublepage -% Uncomment the next line if you do NOT want a page number on your -% abstract and acknowledgments pages. -% \pagestyle{empty} -\setcounter{savepage}{\thepage} -\begin{abstractpage} -\input{abstract} -\end{abstractpage} - -% Additional copy: start a new page, and reset the page number. This way, -% the second copy of the abstract is not counted as separate pages. -% Uncomment the next 6 lines if you need two copies of the abstract -% page. -% \setcounter{page}{\thesavepage} -% \begin{abstractpage} -% \input{abstract} -% \end{abstractpage} - -\cleardoublepage - -\section*{Acknowledgments} - -This is the acknowledgements section. You should replace this with your -own acknowledgements. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -*-latex-*- diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/lgrind.sty --- a/thesis/mitthesis/lgrind.sty Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,228 +0,0 @@ -%% -%% This is file `lgrind.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% lgrind.dtx (with options: `package') -%% -%% LGrind is used to format source code of different programming -%% languages for LaTeX. -%% -%% LGrind is a minor adaptation of Jerry Leichter's tgrind for LaTeX, -%% which was a notable improvement upon Van Jacobsen's tgrind for -%% plain TeX, which was adapted from vgrind, a troff prettyprinter. -%% -%% Based on Van Jacobson's ``tgrindmac'', a macro package for TeX. -%% Modified, 1987 by Jerry Leichter. Put '@' in all internal names. -%% Modified, 1991 by George Reilly. Changed name from tgrind to lgrind. -%% Modified, 1995 by Michael Piefel. Made it work with \LaTeXe. -\NeedsTeXFormat{LaTeX2e}[1995/06/01] -\ProvidesPackage{lgrind} - [1997/01/30 v3.4 LGrind environment and supporting stuff] -\newcount\lc@unt -\newcount\ln@xt -\newcount\LGnuminterval -\LGnuminterval=10 -\DeclareOption{nolineno}{\LGnuminterval=50000} -\DeclareOption{lineno5}{\LGnuminterval=5} -\newif\ifLGleftnum -\DeclareOption{leftnum}{\LGleftnumtrue} -\newskip\LGindent -\LGindent=1.6667\parindent -\DeclareOption{noindent}{\LGindent=0pt} -\newif\ifLGnorules -\DeclareOption{norules}{\LGnorulestrue} -\newlength{\LGsloppy} -\setlength{\LGsloppy}{7.2pt} -\DeclareOption{fussy}{\LGsloppy=0pt} -\newcommand{\DefaultProc}{\@gobble} -\newcommand{\DefaultProcCont}{\@gobble} -\DeclareOption{procnames}{ -\renewcommand{\DefaultProc}[1]{\renewcommand{\Procname}{#1}% -\global\setbox\procbox=\hbox{\PNsize #1}} -\renewcommand{\DefaultProcCont}[1]{\renewcommand\Procname{#1} -\global\setbox\procbox=\hbox{\PNsize\dots #1}}} -\newbox\procbox -\newcommand{\Procname}{} -\ProcessOptions -\def\BGfont{\sffamily} -\def\CMfont{\rmfamily\itshape} -\def\NOfont{\sffamily} -\def\KWfont{\rmfamily\bfseries} -\def\STfont{\ttfamily} -\def\VRfont{\rmfamily} -\def\PNsize{\BGfont\small} -\def\LGsize{\small} -\def\LGfsize{\footnotesize} -\newif\ifLGinline -\newif\ifLGd@fault -\def\LGbegin{\ifLGinline$\hbox\else$$\vbox\fi\bgroup\LGd@faulttrue} -\def\LGend{\ifLGd@fault\egroup\ifLGinline$\else$$\fi\LGd@faultfalse\fi} -\newif\ifc@mment -\newif\ifstr@ng -\newif\ifright@ -\newbox\ls@far -\newbox\tb@x -\newdimen\TBw@d -\newdimen\@ts -{\catcode`\_=\active \gdef\@setunder{\let_=\sp@ce}} -\newcommand{\lgrindheader}{} -\newcommand{\lgrindfilename}{}\newcommand{\lgrindfilesize}{} -\newcommand{\lgrindmodyear}{}\newcommand{\lgrindmodmonth}{} -\newcommand{\lgrindmodday}{}\newcommand{\lgrindmodtime}{} -\newenvironment{lgrind}[1][1]{% -\def\Line##1{\L{\LB{##1}}}% -\newcommand{\Head}[1]{\gdef\lgrindhead{##1}}% -\newcommand{\File}[6]{\gdef\lgrindfilename{##1}\message{(LGround: ##1)}% - \gdef\lgrindmodyear{##2}\gdef\lgrindmodmonth{##3}% - \gdef\lgrindmodday{##4}\gdef\lgrindmodtime{##5}% - \gdef\lgrindfilesize{##6}}% -\let\Proc=\DefaultProc% -\let\ProcCont=\DefaultProcCont% -\hfuzz=\LGsloppy -\def\NewPage{\filbreak\bigskip}% -\ifLGinline - \def\L##1{\setbox\ls@far\null{\CF\strut##1}\ignorespaces}% -\else - \let\r@ghtlno\relax\let\l@ftlno\relax - \ifnum\LGnuminterval>\z@ - \ifLGleftnum - \def\l@ftlno{\ifvoid\procbox\ifnum\lc@unt>\ln@xt - \global\advance\ln@xt by\LGnuminterval - \llap{{\normalfont\scriptsize\the\lc@unt\quad}}\fi - \else\llap{\box\procbox\quad}\fi}% - \else - \def\r@ghtlno{\ifvoid\procbox\ifnum\lc@unt>\ln@xt - \global\advance\ln@xt by\LGnuminterval - \rlap{{\normalfont\scriptsize\enspace\the\lc@unt}}\fi - \else\rlap{\enspace\box\procbox}\fi}% - \fi - \fi - \def\L##1{\@@par\setbox\ls@far=\null\strut - \global\advance\lc@unt by1% - \hbox to \hsize{\hskip\LGindent\l@ftlno ##1\egroup% - \hfil\r@ghtlno}% - \ignorespaces}% -\fi -\lc@unt=#1\advance\lc@unt by-1% -\ln@xt=\LGnuminterval\advance\ln@xt by-1% -\loop\ifnum\lc@unt>\ln@xt\advance\ln@xt by\LGnuminterval\repeat% -\def\LB{\hbox\bgroup\bgroup\box\ls@far\CF\let\next=}% -\def\Tab##1{\egroup\setbox\tb@x=\lastbox\TBw@d=\wd\tb@x% - \advance\TBw@d by 1\@ts\ifdim\TBw@d>##1\@ts - \setbox\ls@far=\hbox{\box\ls@far \box\tb@x \sp@ce}\else - \setbox\ls@far=\hbox to ##1\@ts{\box\ls@far \box\tb@x \hfil}\fi\LB}% -\ifLGinline\def\sp@ce{\hskip .3333em}% -\else \setbox\tb@x=\hbox{\texttt{0}}% - \@ts=0.8\wd\tb@x \def\sp@ce{\hskip 1\@ts}\fi -\catcode`\_=\active \@setunder -\def\CF{\ifc@mment\CMfont\else\ifstr@ng\STfont\fi\fi} -\def\N##1{{\NOfont ##1}\global\futurelet\next\ic@r}% -\def\K##1{{\KWfont ##1}\global\futurelet\next\ic@r}% -\def\V##1{{\VRfont ##1}\global\futurelet\next\ic@r}% -\def\ic@r{\let\@tempa\/\ifx.\next\let\@tempa\relax% - \else\ifx,\next\let\@tempa\relax\fi\fi\@tempa}% -\def\C{\egroup\bgroup\CMfont \global\c@mmenttrue \global\right@false}% -\def\CE{\egroup\bgroup \global\c@mmentfalse}% -\def\S{\egroup\bgroup\STfont \global\str@ngtrue}% -\def\SE{\egroup\bgroup \global\str@ngfalse}% -\def\,{\relax \ifmmode\mskip\thinmuskip \else\thinspace \fi}% -\def\!{\relax \ifmmode\mskip-\thinmuskip \else\negthinspace \fi}% -\def\CH##1##2##3{\relax\ifmmode ##1\relax -\else\ifstr@ng ##2\relax\else$##3$\fi\fi }% -\def\{{\CH\lbrace {\char'173}\lbrace }% -\def\}{\CH\rbrace {\char'175}\rbrace }% -\def\1{\CH///}% % / -\def\2{\CH\backslash {\char'134}\backslash }% % \ -\def\|{\CH|{\char'174}|}% -\def\<{\CH<<<}% -\def\>{\CH>>>}% -\def\*{\CH***}\relax %\relax for DOCSTY -\def\-{\CH---}% -\def\_{\ifstr@ng {\char'137}\else - \leavevmode \kern.06em \vbox{\hrule width.35em}% - \ifdim\fontdimen\@ne\font=\z@ \kern.06em \fi\fi }% -\def\&{\textsf{\char'046}}% -\def\#{{\STfont\char'043}}% -\def\%{{\char'045}}% -\def\~{{\char'176}}% -\def\3{\ifc@mment\ifright@ ''\global\right@false% - \else``\global\right@true \fi - \else{\texttt{\char'042}}\fi}% -\def\4{\ifc@mment'\else {\texttt{\char'015}}\fi}% -\def\5{{\texttt{\char'136}}}% -\def\${{\ifmmode\slshape\else\ifdim\fontdimen\@ne\font>\z@\slshape\fi\fi - \char'044}}% %No $ in \it, use \sl -\parindent\z@\parskip\z@ plus 1pt\hsize\linewidth% -\bgroup\BGfont -} -{\egroup\@@par} % end of environment lgrind -\def\lgrinde{\ifLGinline\else\LGsize\fi\begin{lgrind}} -\def\endlgrinde{\end{lgrind}} -\def\lagrind{\@ifstar{\@slagrind}{\@lagrind}} - -\def\@lagrind{\@ifnextchar[{\@@lagrind}{\@@lagrind[t]}} -\def\@slagrind{\@ifnextchar[{\@@slagrind}{\@@slagrind[t]}} -\def\@@lagrind[#1]#2#3#4{% - \begin{figure}[#1] -\ifLGnorules\else\hrule\fi -\vskip .5\baselineskip -\begin{minipage}\columnwidth\LGsize\LGindent\z@ - \begin{lgrind} -\input #2\relax - \end{lgrind} -\end{minipage} -\vskip .5\baselineskip plus .5\baselineskip -\ifLGnorules\else\hrule\fi\vskip .5\baselineskip -\begingroup - \setbox\z@=\hbox{#4}% - \ifdim\wd\z@>\z@ -\caption{#3}% -\label{#4}% - \else -\captcont{#3}% - \fi -\endgroup -\vskip 2pt - \end{figure} -} -\def\@@slagrind[#1]#2#3#4{% - \begin{figure*}[#1] -\ifLGnorules\else\hrule\fi -\vskip .5\baselineskip -\begin{minipage}\linewidth\LGsize\LGindent\z@ - \begin{lgrind} -\input #2\relax - \end{lgrind} -\end{minipage} -\vskip .5\baselineskip plus .5\baselineskip -\ifLGnorules\else\hrule\fi\vskip .5\baselineskip -\begingroup - \setbox\z@=\hbox{#4}% - \ifdim\wd\z@>\z@ -\caption{#3}% -\label{#4}% - \else -\captcont{#3}% - \fi -\endgroup -\vskip 2pt - \end{figure*} -} -\def\lgrindfile#1{% - \par\addvspace{0.1in} - \ifLGnorules\else\hrule\fi - \vskip .5\baselineskip - \begingroup\LGfsize\LGindent\z@ -\begin{lgrind} - \input #1\relax -\end{lgrind} - \endgroup - \vskip .5\baselineskip - \ifLGnorules\else\hrule\fi - \addvspace{0.1in} -} -\endinput -%% -%% End of file `lgrind.sty'. diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/main.bib --- a/thesis/mitthesis/main.bib Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,356 +0,0 @@ -@preamble{ "\newcommand{\noopsort}[1]{} " - # "\newcommand{\printfirst}[2]{#1} " - # "\newcommand{\singleletter}[1]{#1} " - # "\newcommand{\switchargs}[2]{#2#1} " } - -@ARTICLE{article-minimal, - author = {L[eslie] A. Aamport}, - title = {The Gnats and Gnus Document Preparation System}, - journal = {\mbox{G-Animal's} Journal}, - year = 1986, -} - -@ARTICLE{article-full, - author = {L[eslie] A. Aamport}, - title = {The Gnats and Gnus Document Preparation System}, - journal = {\mbox{G-Animal's} Journal}, - year = 1986, - volume = 41, - number = 7, - pages = "73+", - month = jul, - note = "This is a full ARTICLE entry", -} - -The KEY field is here to override the KEY field in the journal being -cross referenced (so is the NOTE field, in addition to its imparting -information). - -@ARTICLE{article-crossref, - crossref = {WHOLE-JOURNAL}, - key = "", - author = {L[eslie] A. Aamport}, - title = {The Gnats and Gnus Document Preparation System}, - pages = "73+", - note = "This is a cross-referencing ARTICLE entry", -} - -@ARTICLE{whole-journal, - key = "GAJ", - journal = {\mbox{G-Animal's} Journal}, - year = 1986, - volume = 41, - number = 7, - month = jul, - note = {The entire issue is devoted to gnats and gnus - (this entry is a cross-referenced ARTICLE (journal))}, -} - -@INBOOK{inbook-minimal, - author = "Donald E. Knuth", - title = "Fundamental Algorithms", - publisher = "Addison-Wesley", - year = "{\noopsort{1973b}}1973", - chapter = "1.2", -} - -@INBOOK{inbook-full, - author = "Donald E. Knuth", - title = "Fundamental Algorithms", - volume = 1, - series = "The Art of Computer Programming", - publisher = "Addison-Wesley", - address = "Reading, Massachusetts", - edition = "Second", - month = "10~" # jan, - year = "{\noopsort{1973b}}1973", - type = "Section", - chapter = "1.2", - pages = "10--119", - note = "This is a full INBOOK entry", -} - -@INBOOK{inbook-crossref, - crossref = "whole-set", - title = "Fundamental Algorithms", - volume = 1, - series = "The Art of Computer Programming", - edition = "Second", - year = "{\noopsort{1973b}}1973", - type = "Section", - chapter = "1.2", - note = "This is a cross-referencing INBOOK entry", -} - -@BOOK{book-minimal, - author = "Donald E. Knuth", - title = "Seminumerical Algorithms", - publisher = "Addison-Wesley", - year = "{\noopsort{1973c}}1981", -} - -@BOOK{book-full, - author = "Donald E. Knuth", - title = "Seminumerical Algorithms", - volume = 2, - series = "The Art of Computer Programming", - publisher = "Addison-Wesley", - address = "Reading, Massachusetts", - edition = "Second", - month = "10~" # jan, - year = "{\noopsort{1973c}}1981", - note = "This is a full BOOK entry", -} - -@BOOK{book-crossref, - crossref = "whole-set", - title = "Seminumerical Algorithms", - volume = 2, - series = "The Art of Computer Programming", - edition = "Second", - year = "{\noopsort{1973c}}1981", - note = "This is a cross-referencing BOOK entry", -} - -@BOOK{whole-set, - author = "Donald E. Knuth", - publisher = "Addison-Wesley", - title = "The Art of Computer Programming", - series = "Four volumes", - year = "{\noopsort{1973a}}{\switchargs{--90}{1968}}", - note = "Seven volumes planned (this is a cross-referenced set of BOOKs)", -} - -@BOOKLET{booklet-minimal, - key = "Kn{\printfirst{v}{1987}}", - title = "The Programming of Computer Art", -} - -@BOOKLET{booklet-full, - author = "Jill C. Knvth", - title = "The Programming of Computer Art", - howpublished = "Vernier Art Center", - address = "Stanford, California", - month = feb, - year = 1988, - note = "This is a full BOOKLET entry", -} - -@INCOLLECTION{incollection-minimal, - author = "Daniel D. Lincoll", - title = "Semigroups of Recurrences", - booktitle = "High Speed Computer and Algorithm Organization", - publisher = "Academic Press", - year = 1977, -} - -@INCOLLECTION{incollection-full, - author = "Daniel D. Lincoll", - title = "Semigroups of Recurrences", - editor = "David J. Lipcoll and D. H. Lawrie and A. H. Sameh", - booktitle = "High Speed Computer and Algorithm Organization", - number = 23, - series = "Fast Computers", - chapter = 3, - type = "Part", - pages = "179--183", - publisher = "Academic Press", - address = "New York", - edition = "Third", - month = sep, - year = 1977, - note = "This is a full INCOLLECTION entry", -} - -@INCOLLECTION{incollection-crossref, - crossref = "whole-collection", - author = "Daniel D. Lincoll", - title = "Semigroups of Recurrences", - pages = "179--183", - note = "This is a cross-referencing INCOLLECTION entry", -} - -@BOOK{whole-collection, - editor = "David J. Lipcoll and D. H. Lawrie and A. H. Sameh", - title = "High Speed Computer and Algorithm Organization", - booktitle = "High Speed Computer and Algorithm Organization", - number = 23, - series = "Fast Computers", - publisher = "Academic Press", - address = "New York", - edition = "Third", - month = sep, - year = 1977, - note = "This is a cross-referenced BOOK (collection) entry", -} - -@MANUAL{manual-minimal, - key = "Manmaker", - title = "The Definitive Computer Manual", -} - -@MANUAL{manual-full, - author = "Larry Manmaker", - title = "The Definitive Computer Manual", - organization = "Chips-R-Us", - address = "Silicon Valley", - edition = "Silver", - month = apr # "-" # may, - year = 1986, - note = "This is a full MANUAL entry", -} - -@MASTERSTHESIS{mastersthesis-minimal, - author = "{\'{E}}douard Masterly", - title = "Mastering Thesis Writing", - school = "Stanford University", - year = 1988, -} - -@MASTERSTHESIS{mastersthesis-full, - author = "{\'{E}}douard Masterly", - title = "Mastering Thesis Writing", - school = "Stanford University", - type = "Master's project", - address = "English Department", - month = jun # "-" # aug, - year = 1988, - note = "This is a full MASTERSTHESIS entry", -} - -@MISC{misc-minimal, - key = "Missilany", - note = "This is a minimal MISC entry", -} - -@MISC{misc-full, - author = "Joe-Bob Missilany", - title = "Handing out random pamphlets in airports", - howpublished = "Handed out at O'Hare", - month = oct, - year = 1984, - note = "This is a full MISC entry", -} - -@STRING{STOC-key = "OX{\singleletter{stoc}}"} - -@STRING{ACM = "The OX Association for Computing Machinery"} - -@STRING{STOC = " Symposium on the Theory of Computing"} - -@INPROCEEDINGS{inproceedings-minimal, - author = "Alfred V. Oaho and Jeffrey D. Ullman and Mihalis Yannakakis", - title = "On Notions of Information Transfer in {VLSI} Circuits", - booktitle = "Proc. Fifteenth Annual ACM" # STOC, - year = 1983, -} - -@INPROCEEDINGS{inproceedings-full, - author = "Alfred V. Oaho and Jeffrey D. Ullman and Mihalis Yannakakis", - title = "On Notions of Information Transfer in {VLSI} Circuits", - editor = "Wizard V. Oz and Mihalis Yannakakis", - booktitle = "Proc. Fifteenth Annual ACM" # STOC, - number = 17, - series = "All ACM Conferences", - pages = "133--139", - month = mar, - year = 1983, - address = "Boston", - organization = ACM, - publisher = "Academic Press", - note = "This is a full INPROCEDINGS entry", -} - -@INPROCEEDINGS{inproceedings-crossref, - crossref = "whole-proceedings", - author = "Alfred V. Oaho and Jeffrey D. Ullman and Mihalis Yannakakis", - title = "On Notions of Information Transfer in {VLSI} Circuits", - organization = "", - pages = "133--139", - note = "This is a cross-referencing INPROCEEDINGS entry", -} - -@PROCEEDINGS{proceedings-minimal, - key = STOC-key, - title = "Proc. Fifteenth Annual" # STOC, - year = 1983, -} - -@PROCEEDINGS{proceedings-full, - editor = "Wizard V. Oz and Mihalis Yannakakis", - title = "Proc. Fifteenth Annual" # STOC, - number = 17, - series = "All ACM Conferences", - month = mar, - year = 1983, - address = "Boston", - organization = ACM, - publisher = "Academic Press", - note = "This is a full PROCEEDINGS entry", -} - -@PROCEEDINGS{whole-proceedings, - key = STOC-key, - organization = ACM, - title = "Proc. Fifteenth Annual" # STOC, - address = "Boston", - year = 1983, - booktitle = "Proc. Fifteenth Annual ACM" # STOC, - note = "This is a cross-referenced PROCEEDINGS", -} - -@PHDTHESIS{phdthesis-minimal, - author = "F. Phidias Phony-Baloney", - title = "Fighting Fire with Fire: Festooning {F}rench Phrases", - school = "Fanstord University", - year = 1988, -} - -@PHDTHESIS{phdthesis-full, - author = "F. Phidias Phony-Baloney", - title = "Fighting Fire with Fire: Festooning {F}rench Phrases", - school = "Fanstord University", - type = "{PhD} Dissertation", - address = "Department of French", - month = jun # "-" # aug, - year = 1988, - note = "This is a full PHDTHESIS entry", -} - -@TECHREPORT{techreport-minimal, - author = "Tom Terrific", - title = "An {$O(n \log n / \! \log\log n)$} Sorting Algorithm", - institution = "Fanstord University", - year = 1988, -} - -@TECHREPORT{techreport-full, - author = "Tom T{\'{e}}rrific", - title = "An {$O(n \log n / \! \log\log n)$} Sorting Algorithm", - institution = "Fanstord University", - type = "Wishful Research Result", - number = "7", - address = "Computer Science Department, Fanstord, California", - month = oct, - year = 1988, - note = "This is a full TECHREPORT entry", -} - -@UNPUBLISHED{unpublished-minimal, - author = "Ulrich {\"{U}}nderwood and Ned {\~N}et and Paul {\={P}}ot", - title = "Lower Bounds for Wishful Research Results", - note = "Talk at Fanstord University (this is a minimal UNPUBLISHED entry)", -} - -@UNPUBLISHED{unpublished-full, - author = "Ulrich {\"{U}}nderwood and Ned {\~N}et and Paul {\={P}}ot", - title = "Lower Bounds for Wishful Research Results", - month = nov # ", " # dec, - year = 1988, - note = "Talk at Fanstord University (this is a full UNPUBLISHED entry)", -} - -@MISC{random-note-crossref, - key = {Volume-2}, - note = "Volume~2 is listed under Knuth \cite{book-full}" -} diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/main.bib.info --- a/thesis/mitthesis/main.bib.info Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -To comment out part of an entry in BibTeX, you can use: - - @Comment{body of text} - -If you wish to comment out the entire entry, just remove the @ sign in -front of the entry type (i.e., get rid of the '@' in "@Book"). - -************************************************************************* - -You can specify fixed strings (say if you needed to use it multiple -times in your BibTeX file) with the @String command: - - @String(Leslie-Lamport = {Leslie Lamport}) - -and then you could use it in various entries: - - @Book{latex, - Author = Leslie-Lamport, - Title = "\LaTeX", - ... - Year = "1993"} - -************************************************************************* - -The required fields are not prefaced with OPT. Those that are optional -*are* prefaced with OPT (remember to delete those three characters should -you wish to use those fields). - -[Note: - For most entry types the "author" information is simply the AUTHOR -field. However: For the @Book and @Inbook entry types it's the AUTHOR -field, but if there's no author then it's the EDITOR field; for the -@Manual entry type it's the AUTHOR field, but if there's no author then -it's the ORGANIZATION field; and for the @Proceedings entry type it's -the EDITOR filed, but if there's no editor then it's the ORGANIZATION -field.] - -To use this, just have your main.tex specify the following: - - \bibliography{main} - \bibliographystyle{plain} - -There are several options for bibliographystyle: - - plain normal style - listed in ABC order and labeled numerically - unsrt same as plain except entries appear in order of citation - alpha same as plain except entry labels are used - abbrv same as plain except uses abbreviations for first names, - month names, and journal names - -Now that you have the basis for a bibliography, you have to run both -latex and bibtex on the document. First, you should run latex (to -create a foo.aux file, which bibtex reads). Then run bibtex once to get -some of the citations and create a .bbl file. Then run latex again so -that the cross references between the text file and the bibliography are -correct. You may want to repeat running bibtex and latex on the file to -make sure that all cross references are correct. Be warned that -adding/deleting citations and sources will require running bibtex again. - -For more information on this topic, please refer the following pages in -the LaTeX manual by Leslie Lamport: - - 72-74 Bibliography and Citation - 74-74 BibTeX - 140-147 Format of the .bib File (also gives info on other entry types) 187-188 Bibliography and Citation - - ---------------------------------------- diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/main.tex --- a/thesis/mitthesis/main.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -% -*- Mode:TeX -*- - -%% IMPORTANT: The official thesis specifications are available at: -%% http://libraries.mit.edu/archives/thesis-specs/ -%% -%% Please verify your thesis' formatting and copyright -%% assignment before submission. If you notice any -%% discrepancies between these templates and the -%% MIT Libraries' specs, please let us know -%% by e-mailing thesis@mit.edu - -%% The documentclass options along with the pagestyle can be used to generate -%% a technical report, a draft copy, or a regular thesis. You may need to -%% re-specify the pagestyle after you \include cover.tex. For more -%% information, see the first few lines of mitthesis.cls. - -%\documentclass[12pt,vi,twoside]{mitthesis} -%% -%% If you want your thesis copyright to you instead of MIT, use the -%% ``vi'' option, as above. -%% -%\documentclass[12pt,twoside,leftblank]{mitthesis} -%% -%% If you want blank pages before new chapters to be labelled ``This -%% Page Intentionally Left Blank'', use the ``leftblank'' option, as -%% above. - -\documentclass[12pt,twoside]{mitthesis} -\usepackage{lgrind} -\pagestyle{plain} - -%% This bit allows you to either specify only the files which you wish to -%% process, or `all' to process all files which you \include. -%% Krishna Sethuraman (1990). - -\typein [\files]{Enter file names to process, (chap1,chap2 ...), or `all' to -process all files:} -\def\all{all} -\ifx\files\all \typeout{Including all files.} \else \typeout{Including only \files.} \includeonly{\files} \fi - -\begin{document} - -\include{cover} -% Some departments (e.g. 5) require an additional signature page. See -% signature.tex for more information and uncomment the following line if -% applicable. -% \include{signature} -\pagestyle{plain} -\include{contents} -\include{chap1} -\include{chap2} -\appendix -\include{appa} -\include{appb} -\include{biblio} -\end{document} - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/mitthesis.cls --- a/thesis/mitthesis/mitthesis.cls Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,535 +0,0 @@ -% $Log: mitthesis.cls,v $ -% Revision 1.9 2012/02/15 15:48:16 jdreed -% Tweak the "permission" statement per the Libraries' specs -% retrieved 15-Feb-2012 -% -% Revision 1.8 2009/07/27 14:23:50 boojum -% added changing draft mark -% -% Revision 1.6 2005/05/13 19:57:40 boojum -% added leftblank option -% -% Revision 1.5 2002/04/18 14:10:08 boojum -% changed doublespace into setspace for 2e compliance -% -% Revision 1.4 2001/02/08 18:57:13 boojum -% turned two newpages into cleardoublepages -% -% Revision 1.3 2000/08/14 14:53:29 boojum -% commented out footheight, which is relevant for drafthead -% -% Revision 1.2 1999/10/21 14:51:33 boojum -% changed references to documentstyle to documentclass in comments -% -% Revision 1.1 1999/10/21 14:39:31 boojum -% Initial revision -% -%Revision 1.7 1998/04/01 20:45:34 othomas -%removed offending phrase ", and to grant others the right to do so" from copyright notice. -% -%Revision 1.6 96/06/26 15:07:29 othomas -%safety checkin. -% -%Revision 1.5 93/06/07 15:38:50 starflt -%Altered 'vi' option copyright wording to comply with new Institute -%Archives requirements and MIT lawyers. -% -%Revision 1.4 92/08/19 16:51:06 lwvanels -%Updated Course 6 title page for new permissions. -% -%Revision 1.3 92/04/23 10:16:15 epeisach -%Fixed comment character in rcs file -% -%Revision 1.2 92/04/22 13:12:02 epeisach -%Fixes for 1991 course 6 requirements -%Phrase "and to grant others the right to do so" has been added to -%permission clause -%Second copy of abstract is not counted as separate pages so numbering works -%out -% -%Revision 1.1 90/05/04 11:45:53 lwvanels -%Initial revision - -% -% LaTeX format for theses at MIT -% Based on "Specifications for Thesis Preparation" - -% `vi' and `upcase' options by Krishna Sethuraman - krishna@athena.mit.edu -% Margins and heading types by Peter Nuth - nuth@ai.mit.edu -% Title and abstract page by Stephen Gildea - gildea@erl.mit.edu -% Look in this directory for example file mitthesis.doc -% Also for propcover.tex - Boilerplate for PHD proposal. - -% To use this style - say something like: -% for dull, boring thesis format: -% \documentclass[12pt]{mitthesis} -% \pagestyle{plain} -% OR for fast drafts: -% \documentclass[11pt,singlespace,draft]{mitthesis} -% \pagestyle{drafthead} -% OR for Tech Reports: -% \documentclass[12pt,twoside]{mitthesis} -% \pagestyle{headings} -% OR -% some other combination... -% -%%%% New options: -% -% Option `twoside': -% Good for producing Tech Reports. -% The default is single-sided printing, which is what M.I.T. wants on the -% thesis document itself. -% -% Option `singlespace': -% Good for drafts. -% Double-spaced theses are the default. -% That is what M.I.T. asks for in the formal specifications. -% -% Note that MIT does not REQUIRE all theses to be double-spaced anymore. -% Someone in the library system said that it's OK to be single-spaced. -% (Regardless of what the specs. say...) -% To get singlespacing in an area - Use the 'singlespace' environment. -% -% Option `draft': -% Puts `overfull' boxes at the end of lines that are too long. -% -% Pagestyle `drafthead': -% Puts the date and the label ``*DRAFT*'' in the footer. -% -%%%%%%%%%% -% -%%%% Parameters to initialize for boilerplate page: -% -% \title{Mixed Circular Cylindrical Shells} -% \author{J. Casey Salas} -% \prevdegrees{B.S., University of California (1978) \\ -% S.M., Massachusetts Institute of Technology (1981)} -% \department{Department of Electrical Engineering and Computer Science} -% \degree{Doctor of Philosophy} -%% If the thesis is for two degrees simultaneously, list them both -%% separated by \and like this: -% \degree{Doctor of Philosophy \and Master of Science} -% \degreemonth{February} -% \degreeyear{1987} -% \thesisdate{December 10, 1986} -%% If the thesis is copyright by the Institute, leave this line out and -%% the standard copyright line will be used instead. -% \copyrightnotice{J. Casey Salas, 1986} -%% If there is more than one supervisor, use the \supervisor command -%% once for each. -% \supervisor{John D. Galli}{Director, Sound Instrument Laboratory} -%% This is the department committee chairman, not the thesis committee chairman -% \chairman{Arthur C. Smith} -% {Chairman, Departmental Committee on Graduate Students} -%% Make the titlepage based on the above information. If you need -%% something special and can't use the standard form, you can specify -%% the exact text of the titlepage yourself. Put it in a titlepage -%% environment and leave blank lines where you want vertical space. -%% The spaces will be adjusted to fill the entire page. The dotted -%% lines for the signatures are made with the \signature command. -% -%% The abstractpage environment sets up everything on the page except -%% the text itself. The title and other header material are put at the -%% top of the page, and the supervisors are listed at the bottom. A -%% new page is begun both before and after. Of course, an abstract may -%% be more than one page itself. If you need more control over the -%% format of the page, you can use the abstract environment, which puts -%% the word "Abstract" at the beginning and single spaces its text. -% -% \begin{abstractpage} -% Abstract goes here. -% \end{abstractpage} -% -%%%%%%%% Newer additions -% -% documentclass options - -% vi For MIT course VI or VIII thesis - will copyright the thesis to -% you while giving MIT permission to copy and distribute it. -% upcase Will put much of the cover page in uppercase, as per the -% example on page 17 of the *Specifications for Thesis -% Preparation*, (revised 1989) -% Also added ``All Rights Reserved'' to default copyright notice. -% -%%%%%%%%%%% -% -% Documentclass options (vi and upcase) and changes to copyright notice -% Copyright (c) 1990, by Krishna Sethuraman. -% -% Pagestyle and header generation -% Copyright (c) 1987, 1988 by Peter Nuth -% -% Original version -% Copyright (c) 1987 by Stephen Gildea -% Permission to copy all or part of this work is granted, provided -% that the copies are not made or distributed for resale, and that -% the copyright notice and this notice are retained. -% -% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO -% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK, -% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS -% FOR ANY PARTICULAR PURPOSE. -%%%%%%%% - -\NeedsTeXFormat{LaTeX2e} -\ProvidesClass{mitthesis}[1999/10/20] - -\def\mystretch{1.5} % Double spacing hack -\DeclareOption{doublespace}{} % This is default - % So we do not read this style twice -\DeclareOption{singlespace}{ % If he explicitly wants single spacing - \typeout{Single spaced} - \def\mystretch{1}} - -%% `vi' and `upcase' document style options. Krishna Sethuraman (1990) -\newcount\vithesis -\DeclareOption{vi}{\typeout{Course VI/VIII thesis style.}\advance\vithesis by1} -\vithesis=0 - -\DeclareOption{upcase}{\typeout{Uppercase cover page.} - \gdef\choosecase#1{\uppercase\expandafter{#1}}} -\def\choosecase#1{#1} - -%% leftblank option by Kevin Fu -\newif\if@leftblank \@leftblankfalse - -\DeclareOption{leftblank}{\typeout{Intentionally Leaving Pages Blank} -\@leftblanktrue} - -% Thesis looks much like report -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}} -\ProcessOptions -\LoadClass{report} - -% If the user wants single spacing, set baselinestretch=1. - -\usepackage{setspace} - -% Note - doublespace.sty has some float-related troubles in -% combination with graphics or color, and is not officially compliant -% with 2e. setspace is a replacement which is 2e-compliant. - -% Read the doublespace style that we got from Rochester: -%\input setdoublespace.sty - -\def\baselinestretch{\mystretch} % Double spacing hack - -%%%%%%% Set up margins and formatting params %%% - -% Margins. -% Note we want 1in top margin assuming no header line, so push header -% into 1in margin. -% Draft mode brings the header back down. - -\setlength{\oddsidemargin}{0.25in} % 1.25in left margin -\setlength{\evensidemargin}{0.25in} % 1.25in left margin (even pages) -\setlength{\topmargin}{0.0in} % 1in top margin -\setlength{\textwidth}{6.0in} % 6.0in text - 1.25in rt margin -\setlength{\textheight}{9in} % Body ht for 1in margins -\addtolength{\topmargin}{-\headheight} % No header, so compensate -\addtolength{\topmargin}{-\headsep} % for header height and separation - -% The next two macros compensate page style for headers and footers -% We only need them in page styles that USE headers and footers. - % If we have a header, it must be 1in from top of page. -\def\pulldownheader{ % Shift header down 1in from top - \addtolength{\topmargin}{\headheight} - \addtolength{\topmargin}{\headsep} - \addtolength{\textheight}{-\headheight} - \addtolength{\textheight}{-\headsep} -} - % If we have a footer, put it 1in up from bottom -\def\pullupfooter{ % Shift footer up - \addtolength{\textheight}{-\footskip} -% \addtolength{\textheight}{-\footheight} %footheight doesn't -% exist in 2e -} - -%%%%%%% End of margins and formatting params %%% - -%%%%%%% Fix various header and footer problems %%% - -% Draft mark on the right side of left pages (outside) -% this mark is also the only one visible on single sided. -\newcommand{\draftrmark}{**DRAFT**} -% Draft mark on the left side of right pages (outside) -\newcommand{\draftlmark}{**DRAFT**} % - -% Macros to make changing the Draft easier -\newcommand{\drmark}[1]{\renewcommand{\draftrmark}{#1}} -\newcommand{\dlmark}[1]{\renewcommand{\draftlmark}{#1}} -\newcommand{\dmark}[1]{\drmark{#1}\dlmark{#1}} - -% Format for draft of thesis. Define our own PageStyle - -% Just like headings, but has foot lines with the date and warning - -\if@twoside % If two-sided printing. -\def\ps@drafthead{ - \let\@mkboth\markboth - \def\@oddfoot{\rm \today \hfil \sc \draftrmark} - \def\@evenfoot{\sc \draftlmark \hfil \rm \today } - \def\@evenhead{\rm \thepage\hfil \sl \leftmark} - \def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} - \def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne - \@chapapp\ \thechapter. \ \fi ##1}}{}} - \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@ - \thesection. \ \fi ##1}}} - \pulldownheader % Bring header down from edge - \pullupfooter % Bring footer up -} -\else % If one-sided printing. -\def\ps@drafthead{ - \let\@mkboth\markboth - \def\@oddfoot{\rm \today \hfil \sc \draftrmark} - \def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} - \def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne - \@chapapp\ \thechapter. \ \fi ##1}}} - \pulldownheader % Bring header down from edge - \pullupfooter % Bring footer up -} -\fi - -% I redefine these formats that were defined in report.sty -% Definition of 'headings' page style -% Note the use of ##1 for parameter of \def\chaptermark inside the -% \def\ps@headings. -% - -\if@twoside % If two-sided printing. -\def\ps@headings{\let\@mkboth\markboth - \def\@oddfoot{} - \def\@evenfoot{} % No feet. - \def\@evenhead{\rm \thepage\hfil \sl \leftmark} % Left heading. - \def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage} % Right heading. - \def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne - \@chapapp\ \thechapter. \ \fi ##1}}{}} - \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@ - \thesection. \ \fi ##1}}} - \pulldownheader % Bring header down from edge -} -\else % If one-sided printing. -\def\ps@headings{\let\@mkboth\markboth - \def\@oddfoot{} - \def\@evenfoot{} % No feet. - \def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage} % Heading. - \def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne - \@chapapp\ \thechapter. \ \fi ##1}}} - \pulldownheader % Bring header down from edge -} -\fi - -% Redefinition of 'myheadings' page style. -% -\def\ps@myheadings{\let\@mkboth\@gobbletwo - \def\@oddfoot{} - \def\@evenfoot{} - \def\sectionmark##1{} - \def\subsectionmark##1{} - \def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox {}} % - \def\@oddhead{\hbox{}\sl\rightmark \hfil \rm\thepage} % - \pulldownheader % Bring header down from edge -} - -% Redefine '/chapter' to always start on an odd page. -% Should make no difference in singleside mode. -% -\if@leftblank -% Prints "THIS PAGE INTENTIONALLY LEFT BLANK" on blank pages. -\def\chapter{\clearpage\ifodd\c@page\else - \hbox{}\par\vfill\centerline% - {THIS PAGE INTENTIONALLY LEFT BLANK}% - \vfill\newpage\fi - \thispagestyle{plain} % Page style of chapter page is 'plain' - \global\@topnum\z@ % Prevents figures from going at top of page. - \@afterindentfalse % Suppresses indent in first paragraph. Change - \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent. -\else -\def\chapter{\cleardoublepage % Starts new page. - \thispagestyle{plain} % Page style of chapter page is 'plain' - \global\@topnum\z@ % Prevents figures from going at top of page. - \@afterindentfalse % Suppresses indent in first paragraph. Change - \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent. -\fi -% If using the report style, use - instead of . in the figure number. -\@ifundefined{thechapter}{}{\def\thefigure{\thechapter-\arabic{figure}}} - - -%%%%%%%%% End of Style parameters %%%% - -% Here's Gildea's Boilerplate Stuff. -% Copyright (c) 1987 by Stephen Gildea -% Permission to copy all or part of this work is granted, provided -% that the copies are not made or distributed for resale, and that -% the copyright notice and this notice are retained. - -%% Define all the pieces that go on the title page and the abstract. - -% \title and \author already exist - -\def\prevdegrees#1{\gdef\@prevdegrees{#1}} -\def\@prevdegrees{} - -\def\department#1{\gdef\@department{#1}} - -% If you are getting two degrees, use \and between the names. -\def\degree#1{\setbox0\hbox{#1} %for side effect of setting \@degreeword - \gdef\@degree{#1}} - -% \and is used inside the \degree argument to separate two degrees -\def\and{\gdef\@degreeword{degrees} \par and \par} -\def\@degreeword{degree} - -% The copyright notice stuff is a tremendous mess. -% -% \@copyrightnotice is used by \maketitle to actually put text on the -% page; it defaults to ``Copyright MIT 19xx. All rights reserved.'' -% \copyrightnoticetext takes an argument and defined \@copyrightnotice -% to that argument. \copyrightnotice takes an argument, and calls -% \copyrightnoticetext with that argument, preceeded by a copyright -% symbol and followed by ``All rights reserved.'' and the standard -% permission notice. -% -% If you use the 'vi' option, \copyrightnoticetext is used to set the -% copyright to ``(C) Your Name, Current Year in Roman Numerals.'' -% followed by the permission notice. - -% If there is no \copyrightnotice command, it is asssumed that MIT -% holds the copyright. This commands adds the copyright symbol to the -% beginning, and puts the standard permission notice below. -%% ``All rights reserved'' added. Krishna Sethuraman (1990) -\def\copyrightnotice#1{\copyrightnoticetext{\copyright\ #1. All rights -reserved.\par\permission}} - -% Occacionally you will need to exactly specify the text of the -% copyright notice. The \copyrightnoticetext command is then useful. -\long\def\copyrightnoticetext#1{\gdef\@copyrightnotice{#1}} -\def\@copyrightnotice{\copyright\ \Mit\ \@degreeyear. All rights reserved.} - -%% `vi' documentclass option: Specifying this option automatically -%% copyrights the thesis to the author and gives MIT permission to copy and -%% distribute the document. If you want, you can still specify -%% \copyrightnotice{stuff} to copyright to someone else, or -%% \copyrightnoticetext{stuff} to specify the exact text of the copyright -%% notice. -\ifodd\vithesis \copyrightnoticetext{\copyright\ \@author, -\uppercase\expandafter{\romannumeral\@degreeyear}. All rights reserved.\par\permission} -%% or just -%%\@degreeyear}} -\typeout{Copyright given to author, - permission to copy/distribute given to MIT.} -\else \typeout{Thesis document copyright MIT unless otherwise (manually) specified} -\fi - -\def\thesisdate#1{\gdef\@thesisdate{#1}} - -% typically just a month and year -\def\degreemonth#1{\gdef\@degreemonth{#1}} -\def\degreeyear#1{\gdef\@degreeyear{#1}} - -% Usage: \supervisor{name}{title} -% \chairman{name}{title} - -% since there can be more than one supervisor, -% we build the appropriate boxes for the titlepage and -% the abstractpage as the user makes multiple calls -% to \supervisor -\newbox\@titlesupervisor \newbox\@abstractsupervisor - -\def\supervisor#1#2{\setbox\@titlesupervisor\vbox - {\unvbox\@titlesupervisor \vskip 10pt% plus 1fil minus 1fil - \def\baselinestretch{1}\large - \signature{Certified by}{#1 \\ #2 \\ Thesis Supervisor}} - \setbox\@abstractsupervisor\vbox{\unvbox\@abstractsupervisor - \vskip\baselineskip \def\baselinestretch{1}\@normalsize - \par\noindent Thesis Supervisor: #1 \\ Title: #2}} - -% department chairman, not thesis committee chairman -\def\chairman#1#2{\gdef\@chairmanname{#1}\gdef\@chairmantitle{#2}} - -%% `upcase' documentclass option: \choosecase is defined either as a dummy or -%% a macro to change the (expanded) argument to uppercase. -\def\maketitle{\begin{titlepage} -\large -{\def\baselinestretch{1.2}\Large\bf \choosecase{\@title} \par} -by\par -{\Large \choosecase{\@author}} -\par -\@prevdegrees -\par -\choosecase{Submitted to the} \choosecase{\@department} \\ -\choosecase{in partial fulfillment of the requirements for the} -\choosecase{\@degreeword} -\choosecase{of} -\par -\choosecase{\@degree} -\par -at the -\par\MIT\par -\@degreemonth\ \@degreeyear -\par -\@copyrightnotice -\par -\vskip 3\baselineskip -\signature{Author}{\@department \\ \@thesisdate} -\par -\vfill -\unvbox\@titlesupervisor -\par -\vfill -\signature{Accepted by}{\@chairmanname \\ \@chairmantitle} -\vfill -\end{titlepage}} - -% this environment should probably be called abstract, -% but we want people to also be able to get at the more -% basic abstract environment -\def\abstractpage{\cleardoublepage -\begin{center}{\large{\bf \@title} \\ -by \\ -\@author \\[\baselineskip]} -\par -\def\baselinestretch{1}\@normalsize -Submitted to the \@department \\ -on \@thesisdate, in partial fulfillment of the \\ -requirements for the \@degreeword\ of \\ -\@degree -\end{center} -\par -\begin{abstract}} - -%% Changed from \unvbox to \unvcopy for use with multiple copies of abstract -%% page. -%% Krishna Sethuraman (1990) -\def\endabstractpage{\end{abstract}\noindent - \unvcopy\@abstractsupervisor \newpage} - -%% This counter is used to save the page number for the second copy of -%% the abstract. -\newcounter{savepage} - -% You can use the titlepage environment to do it all yourself if you -% don't want to use \maketitle. If the titlepage environment, the -% paragraph skip is infinitely stretchable, so if you leave a blank line -% between lines that you want space between, the space will stretch so -% that the title page fills up the entire page. -\def\titlepage{\cleardoublepage\centering - \thispagestyle{empty} - \parindent 0pt \parskip 10pt plus 1fil minus 1fil - \def\baselinestretch{1}\@normalsize\vbox to \vsize\bgroup\vbox to 9in\bgroup} -% The \kern0pt pushes any depth into the height. Thanks to Richard Stone. -\def\endtitlepage{\par\kern 0pt\egroup\vss\egroup\newpage} - -\def\MIT{MASSACHUSETTS INSTITUTE OF TECHNOLOGY} -\def\Mit{Massachusetts Institute of Technology} - -\def\permission{\par\noindent{\centering - The author hereby grants to MIT permission to reproduce and to - distribute publicly paper and electronic copies of this thesis - document in whole or in part in any medium now known or hereafter - created.}\par} - -\def\signature#1#2{\par\noindent#1\dotfill\null\\* - {\raggedleft #2\par}} - -\def\abstract{\subsection*{Abstract}\small\def\baselinestretch{1}\@normalsize} -\def\endabstract{\par} - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/propcover.tex --- a/thesis/mitthesis/propcover.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,346 +0,0 @@ -%% This file is for producing a Doctoral Thesis proposal. It should be fairly -%% self-explanatory. - -\documentclass{article} -\begin{document} - -\bibliographystyle{plain} -\pagestyle{empty} -\markboth{{\sc thesis proposal}}{{\sc thesis proposal}} -\def\title{Parallel Processor Architecture} -\def\author{Peter Nuth} -\def\addrone{305 Memorial Drive, 606C} -\def\addrtwo{Cambridge, MA 02139} - -\def\degree{Doctor of Philosophy} -%% Added \deptname for PhD proposals in other fields. -%% Krishna Sethuraman (1990) -\def\deptname{Electrical Engineering \\ and Computer Science} -\def\laboratory{Artificial Intelligence Laboratory} - -\def\submissiondate{\today} -\def\completiondate{September 1990} - -\def\supervisor{Professor William J. Dally} -\def\supertitleone{Associate Professor of Electrical Engineering} -\def\supertitletwo{and Computer Science} - -\def\readerone{Professor Arvind} -\def\readeronetitleone{Professor of Electrical Engineering} -\def\readeronetitletwo{and Computer Science} - -\def\readertwo{Professor Thomas Knight} -\def\readertwotitleone{Assistant Professor of Electrical Engineering} -\def\readertwotitletwo{and Computer Science} - -\def\readerthree{Professor William J. Dally} -\def\readerthreetitleone{Associate Professor of Electrical Engineering} -\def\readerthreetitletwo{and Computer Science} - - -\def\abstract{ -The proposed research -is a study of processor architecture for -large scale parallel computer systems. -The thesis introduces mechanisms -for fast context switching, -synchronization between tasks, -and run-time binding of -variable names to processor memory. -Various design tradeoffs are evaluated -through simulation of a processor running a typical load. -This work contains -estimates of -the speed and complexity of the different -alternatives as implemented in VLSI. -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%% You Should Not Need To Modify Anything Below Here %%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Cover Page - Author signs %%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{center} -{\Large \bf - Massachusetts Institute of Technology -\\ Department of \deptname \\} -\vspace{.25in} -{\Large \bf - Proposal for Thesis Research in Partial Fulfillment -\\ of the Requirements for the Degree of -\\ \degree \\} -\end{center} - -\vspace{.5in} - -\def\sig{{\small \sc (Signature of Author)}} - -\begin{tabular}{rlc} - {\small \sc Title:} & \multicolumn{2}{l}{\title} -\\ {\small \sc Submitted by:} - & \author & \\ - & \addrone & \\ - & \addrtwo & \\ \cline{3-3} - & & \makebox[2in][c]{\sig} -\\ {\small \sc Date of Submission:} & \multicolumn{2}{l}{\submissiondate} -\\ {\small \sc Expected Date of Completion:} & \multicolumn{2}{l}{\completiondate} -\\ {\small \sc Laboratory:} & \multicolumn{2}{l}{\laboratory} -\end{tabular} - - -\vspace{.75in} -{\bf \sc Brief Statement of the Problem:} - -\abstract - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newpage %%% Supervision Agreement %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{flushright} - Massachusetts Institute of Technology -\\ Department of \deptname -\\ Cambridge, Massachusetts 02139 -\end{flushright} - -\underline{\bf Doctoral Thesis Supervision Agreement} - -\vspace{.25in} -\begin{tabular}{rl} - {\small \sc To:} & Department Graduate Committee -\\ {\small \sc From:} & \supervisor -\end{tabular} - -\vspace{.25in} -The program outlined in the proposal: - -\vspace{.25in} -\begin{tabular}{rl} - {\small \sc Title:} & \title -\\ {\small \sc Author:} & \author -\\ {\small \sc Date:} & \submissiondate -\end{tabular} - -\vspace{.25in} -is adequate for a Doctoral thesis. -I believe that appropriate readers for this thesis would be: - -\vspace{.25in} -\begin{tabular}{rl} - {\small \sc Reader 1:} & \readerone -\\ {\small \sc Reader 2:} & \readertwo -%\\ {\small \sc Reader 3:} & \readerthree -\end{tabular} - -\vspace{.25in} -Facilities and support for the research outlined in the proposal are available. -I am willing to supervise the thesis and evaluate the thesis report. - -\vspace{.25in} -\begin{tabular}{crc} - \hspace{2in} & {\sc Signed:} & \\ \cline{3-3} - & & {\small \sc \supertitleone} \\ - & & {\small \sc \supertitletwo} \\ - & & \\ - & {\sc Date:} & \\ \cline{3-3} -\end{tabular} - -\vspace{0in plus 1fill} - -Comments: \\ -\begin{tabular}{c} - \hspace{6.25in} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ -% \mbox{} \\ \cline{1-1} \mbox{} \\ -% \mbox{} \\ \cline{1-1} \mbox{} \\ -% \mbox{} \\ \cline{1-1} \mbox{} \\ -\end{tabular} - - %%%%%%%%%%%%%%%%%%%%%%%%%% -\newpage %%% Reader I Agreement %%% - %%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{flushright} - Massachusetts Institute of Technology -\\ Department of \deptname -\\ Cambridge, Massachusetts 02139 -\end{flushright} - -\underline{\bf Doctoral Thesis Reader Agreement} - -\vspace{.25in} -\begin{tabular}{rl} - {\small \sc To:} & Department Graduate Committee -\\ {\small \sc From:} & \readerone -\end{tabular} - -\vspace{.25in} -The program outlined in the proposal: - -\vspace{.25in} -\begin{tabular}{rl} - {\small \sc Title:} & \title -\\ {\small \sc Author:} & \author -\\ {\small \sc Date:} & \submissiondate -\\ {\small \sc Supervisor:} & \supervisor -\\ {\small \sc Other Reader:} & \readertwo -%\\ {\small \sc Other Reader:} & \readerthree -\end{tabular} - -\vspace{.25in} -is adequate for a Doctoral thesis. -I am willing to aid in guiding the research -and in evaluating the thesis report as a reader. - -\vspace{.25in} -\begin{tabular}{crc} - \hspace{2in} & {\sc Signed:} & \\ \cline{3-3} - & & {\small \sc \readeronetitleone} \\ - & & {\small \sc \readeronetitletwo} \\ - & & \\ - & {\sc Date:} & \\ \cline{3-3} -\end{tabular} - -\vspace{0in plus 1fill} - -Comments: \\ -\begin{tabular}{c} - \hspace{6.25in} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ -\end{tabular} - - - %%%%%%%%%%%%%%%%%%%%%%%%%%% -\newpage %%% Reader II Agreement %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%% - - -\begin{flushright} - Massachusetts Institute of Technology -\\ Department of \deptname -\\ Cambridge, Massachusetts 02139 -\end{flushright} - -\underline{\bf Doctoral Thesis Reader Agreement} - -\vspace{.25in} -\begin{tabular}{rl} - {\small \sc To:} & Department Graduate Committee -\\ {\small \sc From:} & \readertwo -\end{tabular} - -\vspace{.25in} -The program outlined in the proposal: - -\vspace{.25in} -\begin{tabular}{rl} - {\small \sc Title:} & \title -\\ {\small \sc Author:} & \author -\\ {\small \sc Date:} & \submissiondate -\\ {\small \sc Supervisor:} & \supervisor -\\ {\small \sc Other Reader:} & \readerone -%\\ {\small \sc Other Reader:} & \readerthree -\end{tabular} - -\vspace{.25in} -is adequate for a Doctoral thesis. -I am willing to aid in guiding the research -and in evaluating the thesis report as a reader. - -\vspace{.25in} -\begin{tabular}{crc} - \hspace{2in} & {\sc Signed:} & \\ \cline{3-3} - & & {\small \sc \readertwotitleone} \\ - & & {\small \sc \readertwotitletwo} \\ - & & \\ - & {\sc Date:} & \\ \cline{3-3} -\end{tabular} - -\vspace{0in plus 1fill} - -Comments: \\ -\begin{tabular}{c} - \hspace{6.25in} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ -\end{tabular} -\newpage - %%%%%%%%%%%%%%%%%%%%%%%%%%% -\newpage %%% Reader III Agreement %%% - %%%%%%%%%%%%%%%%%%%%%%%%%%% - - -\begin{flushright} - Massachusetts Institute of Technology -\\ Department of \deptname -\\ Cambridge, Massachusetts 02139 -\end{flushright} - -\underline{\bf Doctoral Thesis Reader Agreement} - -\vspace{.25in} -\begin{tabular}{rl} - {\small \sc To:} & Department Graduate Committee -\\ {\small \sc From:} & \readerthree -\end{tabular} - -\vspace{.25in} -The program outlined in the proposal: - -\vspace{.25in} -\begin{tabular}{rl} - {\small \sc Title:} & \title -\\ {\small \sc Author:} & \author -\\ {\small \sc Date:} & \submissiondate -\\ {\small \sc Supervisor:} & \supervisor -\\ {\small \sc Other Reader:} & \readerone -\\ {\small \sc Other Reader:} & \readertwo -\end{tabular} - -\vspace{.25in} -is adequate for a Doctoral thesis. -I am willing to aid in guiding the research -and in evaluating the thesis report as a reader. - -\vspace{.25in} -\begin{tabular}{crc} - \hspace{2in} & {\sc Signed:} & \\ \cline{3-3} - & & {\small \sc \readerthreetitleone} \\ - & & {\small \sc \readerthreetitletwo} \\ - & & \\ - & {\sc Date:} & \\ \cline{3-3} -\end{tabular} - -\vspace{0in plus 1fill} - -Comments: \\ -\begin{tabular}{c} - \hspace{6.25in} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ - \mbox{} \\ \cline{1-1} \mbox{} \\ -\end{tabular} -\newpage - -\end{document} - - - - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/sample.org --- a/thesis/mitthesis/sample.org Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -#+TITLE: asdhfklasdfkljasdf -#+AUTHOR: asdhfkjasdhfkljdasf - -* Section one -asdfasdfasdf -* Another section -aqghowahaoshfwhowehorwer \ No newline at end of file diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/sample.tex --- a/thesis/mitthesis/sample.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -% Created 2014-03-20 Thu 23:12 -\documentclass[11pt]{article} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage{fixltx2e} -\usepackage{graphicx} -\usepackage{longtable} -\usepackage{float} -\usepackage{wrapfig} -\usepackage{rotating} -\usepackage[normalem]{ulem} -\usepackage{amsmath} -\usepackage{textcomp} -\usepackage{marvosym} -\usepackage{wasysym} -\usepackage{amssymb} -\usepackage{hyperref} -\tolerance=1000 -\author{asdhfkjasdhfkljdasf} -\date{\today} -\title{asdhfklasdfkljasdf} -\hypersetup{ - pdfkeywords={}, - pdfsubject={}, - pdfcreator={Emacs 24.2.1 (Org mode 8.2.5h)}} -\begin{document} - -\maketitle -\tableofcontents - - -\section{Section one} -\label{sec-1} -asdfasdfasdf - -\section{Another section} -\label{sec-2} -aqghowahaoshfwhowehorwer -% Emacs 24.2.1 (Org mode 8.2.5h) -\end{document} \ No newline at end of file diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/signature.tex --- a/thesis/mitthesis/signature.tex Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -% -*- Mode:TeX -*- -% -% Some departments (e.g. Chemistry) require an additional cover page -% with signatures of the thesis committee. Please check with your -% thesis advisor or other appropriate person to determine if such a -% page is required for your thesis. -% -% If you choose not to use the "titlepage" environment, a \newpage -% commands, and several \vspace{\fill} commands may be necessary to -% achieve the required spacing. The \signature command is defined in -% the "mitthesis" class -% -% The following sample appears courtesy of Ben Kaduk and -% was used in his June 2012 doctoral thesis in Chemistry. - -\begin{titlepage} -\begin{large} -This doctoral thesis has been examined by a Committee of the Department -of Chemistry as follows: - -\signature{Professor Jianshu Cao}{Chairman, Thesis Committee \\ - Professor of Chemistry} - -\signature{Professor Troy Van Voorhis}{Thesis Supervisor \\ - Associate Professor of Chemistry} - -\signature{Professor Robert W. Field}{Member, Thesis Committee \\ - Haslam and Dewey Professor of Chemistry} -\end{large} -\end{titlepage} - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/mitthesis/templates.zip Binary file thesis/mitthesis/templates.zip has changed diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/org/first-chapter.html --- a/thesis/org/first-chapter.html Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,455 +0,0 @@ - - - - -<code>CORTEX</code> - - - - - - - - - - - - - - - -
-

CORTEX

- - -
-
- -
- -

aurellem

- -
- -
Written by Robert McIntyre
- - - - - - - -
-

Artificial Imagination

-
- - -

- Imagine watching a video of someone skateboarding. When you watch - the video, you can imagine yourself skateboarding, and your - knowledge of the human body and its dynamics guides your - interpretation of the scene. For example, even if the skateboarder - is partially occluded, you can infer the positions of his arms and - body from your own knowledge of how your body would be positioned if - you were skateboarding. If the skateboarder suffers an accident, you - wince in sympathy, imagining the pain your own body would experience - if it were in the same situation. This empathy with other people - guides our understanding of whatever they are doing because it is a - powerful constraint on what is probable and possible. In order to - make use of this powerful empathy constraint, I need a system that - can generate and make sense of sensory data from the many different - senses that humans possess. The two key proprieties of such a system - are embodiment and imagination. -

- -
- -
-

What is imagination?

-
- - -

- One kind of imagination is sympathetic imagination: you imagine - yourself in the position of something/someone you are - observing. This type of imagination comes into play when you follow - along visually when watching someone perform actions, or when you - sympathetically grimace when someone hurts themselves. This type of - imagination uses the constraints you have learned about your own - body to highly constrain the possibilities in whatever you are - seeing. It uses all your senses to including your senses of touch, - proprioception, etc. Humans are flexible when it comes to "putting - themselves in another's shoes," and can sympathetically understand - not only other humans, but entities ranging animals to cartoon - characters to single dots on a screen! -

-

- Another kind of imagination is predictive imagination: you - construct scenes in your mind that are not entirely related to - whatever you are observing, but instead are predictions of the - future or simply flights of fancy. You use this type of imagination - to plan out multi-step actions, or play out dangerous situations in - your mind so as to avoid messing them up in reality. -

-

- Of course, sympathetic and predictive imagination blend into each - other and are not completely separate concepts. One dimension along - which you can distinguish types of imagination is dependence on raw - sense data. Sympathetic imagination is highly constrained by your - senses, while predictive imagination can be more or less dependent - on your senses depending on how far ahead you imagine. Daydreaming - is an extreme form of predictive imagination that wanders through - different possibilities without concern for whether they are - related to whatever is happening in reality. -

-

- For this thesis, I will mostly focus on sympathetic imagination and - the constraint it provides for understanding sensory data. -

-
- -
- -
-

What problems can imagination solve?

-
- - -

- Consider a video of a cat drinking some water. -

- -
-

../images/cat-drinking.jpg

-

A cat drinking some water. Identifying this action is beyond the state of the art for computers.

-
- -

- It is currently impossible for any computer program to reliably - label such an video as "drinking". I think humans are able to label - such video as "drinking" because they imagine themselves as the - cat, and imagine putting their face up against a stream of water - and sticking out their tongue. In that imagined world, they can - feel the cool water hitting their tongue, and feel the water - entering their body, and are able to recognize that feeling as - drinking. So, the label of the action is not really in the pixels - of the image, but is found clearly in a simulation inspired by - those pixels. An imaginative system, having been trained on - drinking and non-drinking examples and learning that the most - important component of drinking is the feeling of water sliding - down one's throat, would analyze a video of a cat drinking in the - following manner: -

-
    -
  • Create a physical model of the video by putting a "fuzzy" model - of its own body in place of the cat. Also, create a simulation of - the stream of water. - -
  • -
  • Play out this simulated scene and generate imagined sensory - experience. This will include relevant muscle contractions, a - close up view of the stream from the cat's perspective, and most - importantly, the imagined feeling of water entering the mouth. - -
  • -
  • The action is now easily identified as drinking by the sense of - taste alone. The other senses (such as the tongue moving in and - out) help to give plausibility to the simulated action. Note that - the sense of vision, while critical in creating the simulation, - is not critical for identifying the action from the simulation. -
  • -
- - -

- More generally, I expect imaginative systems to be particularly - good at identifying embodied actions in videos. -

-
-
- -
- -
-

Cortex

-
- - -

- The previous example involves liquids, the sense of taste, and - imagining oneself as a cat. For this thesis I constrain myself to - simpler, more easily digitizable senses and situations. -

-

- My system, Cortex performs imagination in two different simplified - worlds: worm world and stick figure world. In each of these - worlds, entities capable of imagination recognize actions by - simulating the experience from their own perspective, and then - recognizing the action from a database of examples. -

-

- In order to serve as a framework for experiments in imagination, - Cortex requires simulated bodies, worlds, and senses like vision, - hearing, touch, proprioception, etc. -

- -
- -
-

A Video Game Engine takes care of some of the groundwork

-
- - -

- When it comes to simulation environments, the engines used to - create the worlds in video games offer top-notch physics and - graphics support. These engines also have limited support for - creating cameras and rendering 3D sound, which can be repurposed - for vision and hearing respectively. Physics collision detection - can be expanded to create a sense of touch. -

-

- jMonkeyEngine3 is one such engine for creating video games in - Java. It uses OpenGL to render to the screen and uses screengraphs - to avoid drawing things that do not appear on the screen. It has an - active community and several games in the pipeline. The engine was - not built to serve any particular game but is instead meant to be - used for any 3D game. I chose jMonkeyEngine3 it because it had the - most features out of all the open projects I looked at, and because - I could then write my code in Clojure, an implementation of LISP - that runs on the JVM. -

-
- -
- -
-

CORTEX Extends jMonkeyEngine3 to implement rich senses

-
- - -

- Using the game-making primitives provided by jMonkeyEngine3, I have - constructed every major human sense except for smell and - taste. Cortex also provides an interface for creating creatures - in Blender, a 3D modeling environment, and then "rigging" the - creatures with senses using 3D annotations in Blender. A creature - can have any number of senses, and there can be any number of - creatures in a simulation. -

-

- The senses available in Cortex are: -

- - - -
-
- -
- -
-

A roadmap for Cortex experiments

-
- - - -
- -
-

Worm World

-
- - -

- Worms in Cortex are segmented creatures which vary in length and - number of segments, and have the senses of vision, proprioception, - touch, and muscle tension. -

- -
-

../images/finger-UV.png

-

This is the tactile-sensor-profile for the upper segment of a worm. It defines regions of high touch sensitivity (where there are many white pixels) and regions of low sensitivity (where white pixels are sparse).

-
- - - - -
-
- -
YouTube -
-

The worm responds to touch.

-
- -
-
- -
YouTube -
-

Proprioception in a worm. The proprioceptive readout is - in the upper left corner of the screen.

-
- -

- A worm is trained in various actions such as sinusoidal movement, - curling, flailing, and spinning by directly playing motor - contractions while the worm "feels" the experience. These actions - are recorded both as vectors of muscle tension, touch, and - proprioceptive data, but also in higher level forms such as - frequencies of the various contractions and a symbolic name for the - action. -

-

- Then, the worm watches a video of another worm performing one of - the actions, and must judge which action was performed. Normally - this would be an extremely difficult problem, but the worm is able - to greatly diminish the search space through sympathetic - imagination. First, it creates an imagined copy of its body which - it observes from a third person point of view. Then for each frame - of the video, it maneuvers its simulated body to be in registration - with the worm depicted in the video. The physical constraints - imposed by the physics simulation greatly decrease the number of - poses that have to be tried, making the search feasible. As the - imaginary worm moves, it generates imaginary muscle tension and - proprioceptive sensations. The worm determines the action not by - vision, but by matching the imagined proprioceptive data with - previous examples. -

-

- By using non-visual sensory data such as touch, the worms can also - answer body related questions such as "did your head touch your - tail?" and "did worm A touch worm B?" -

-

- The proprioceptive information used for action identification is - body-centric, so only the registration step is dependent on point - of view, not the identification step. Registration is not specific - to any particular action. Thus, action identification can be - divided into a point-of-view dependent generic registration step, - and a action-specific step that is body-centered and invariant to - point of view. -

-
- -
- -
-

Stick Figure World

-
- - -

- This environment is similar to Worm World, except the creatures are - more complicated and the actions and questions more varied. It is - an experiment to see how far imagination can go in interpreting - actions. -

-
-
-
- -
-

Date: 2013-11-07 04:21:29 EST

-

Author: Robert McIntyre

-

Org version 7.7 with Emacs version 24

-Validate XHTML 1.0 - -
- - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/org/first-chapter.org --- a/thesis/org/first-chapter.org Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,238 +0,0 @@ -#+title: =CORTEX= -#+author: Robert McIntyre -#+email: rlm@mit.edu -#+description: Using embodied AI to facilitate Artificial Imagination. -#+keywords: AI, clojure, embodiment -#+SETUPFILE: ../../aurellem/org/setup.org -#+INCLUDE: ../../aurellem/org/level-0.org -#+babel: :mkdirp yes :noweb yes :exports both -#+OPTIONS: toc:nil, num:nil - -* Artificial Imagination - - Imagine watching a video of someone skateboarding. When you watch - the video, you can imagine yourself skateboarding, and your - knowledge of the human body and its dynamics guides your - interpretation of the scene. For example, even if the skateboarder - is partially occluded, you can infer the positions of his arms and - body from your own knowledge of how your body would be positioned if - you were skateboarding. If the skateboarder suffers an accident, you - wince in sympathy, imagining the pain your own body would experience - if it were in the same situation. This empathy with other people - guides our understanding of whatever they are doing because it is a - powerful constraint on what is probable and possible. In order to - make use of this powerful empathy constraint, I need a system that - can generate and make sense of sensory data from the many different - senses that humans possess. The two key proprieties of such a system - are /embodiment/ and /imagination/. - -** What is imagination? - - One kind of imagination is /sympathetic/ imagination: you imagine - yourself in the position of something/someone you are - observing. This type of imagination comes into play when you follow - along visually when watching someone perform actions, or when you - sympathetically grimace when someone hurts themselves. This type of - imagination uses the constraints you have learned about your own - body to highly constrain the possibilities in whatever you are - seeing. It uses all your senses to including your senses of touch, - proprioception, etc. Humans are flexible when it comes to "putting - themselves in another's shoes," and can sympathetically understand - not only other humans, but entities ranging from animals to cartoon - characters to [[http://www.youtube.com/watch?v=0jz4HcwTQmU][single dots]] on a screen! - - Another kind of imagination is /predictive/ imagination: you - construct scenes in your mind that are not entirely related to - whatever you are observing, but instead are predictions of the - future or simply flights of fancy. You use this type of imagination - to plan out multi-step actions, or play out dangerous situations in - your mind so as to avoid messing them up in reality. - - Of course, sympathetic and predictive imagination blend into each - other and are not completely separate concepts. One dimension along - which you can distinguish types of imagination is dependence on raw - sense data. Sympathetic imagination is highly constrained by your - senses, while predictive imagination can be more or less dependent - on your senses depending on how far ahead you imagine. Daydreaming - is an extreme form of predictive imagination that wanders through - different possibilities without concern for whether they are - related to whatever is happening in reality. - - For this thesis, I will mostly focus on sympathetic imagination and - the constraint it provides for understanding sensory data. - -** What problems can imagination solve? - - Consider a video of a cat drinking some water. - - #+caption: A cat drinking some water. Identifying this action is beyond the state of the art for computers. - #+ATTR_LaTeX: width=5cm - [[../images/cat-drinking.jpg]] - - It is currently impossible for any computer program to reliably - label such an video as "drinking". I think humans are able to label - such video as "drinking" because they imagine /themselves/ as the - cat, and imagine putting their face up against a stream of water - and sticking out their tongue. In that imagined world, they can - feel the cool water hitting their tongue, and feel the water - entering their body, and are able to recognize that /feeling/ as - drinking. So, the label of the action is not really in the pixels - of the image, but is found clearly in a simulation inspired by - those pixels. An imaginative system, having been trained on - drinking and non-drinking examples and learning that the most - important component of drinking is the feeling of water sliding - down one's throat, would analyze a video of a cat drinking in the - following manner: - - - Create a physical model of the video by putting a "fuzzy" model - of its own body in place of the cat. Also, create a simulation of - the stream of water. - - - Play out this simulated scene and generate imagined sensory - experience. This will include relevant muscle contractions, a - close up view of the stream from the cat's perspective, and most - importantly, the imagined feeling of water entering the mouth. - - - The action is now easily identified as drinking by the sense of - taste alone. The other senses (such as the tongue moving in and - out) help to give plausibility to the simulated action. Note that - the sense of vision, while critical in creating the simulation, - is not critical for identifying the action from the simulation. - - More generally, I expect imaginative systems to be particularly - good at identifying embodied actions in videos. - -* Cortex - - The previous example involves liquids, the sense of taste, and - imagining oneself as a cat. For this thesis I constrain myself to - simpler, more easily digitizable senses and situations. - - My system, =CORTEX= performs imagination in two different simplified - worlds: /worm world/ and /stick-figure world/. In each of these - worlds, entities capable of imagination recognize actions by - simulating the experience from their own perspective, and then - recognizing the action from a database of examples. - - In order to serve as a framework for experiments in imagination, - =CORTEX= requires simulated bodies, worlds, and senses like vision, - hearing, touch, proprioception, etc. - -** A Video Game Engine takes care of some of the groundwork - - When it comes to simulation environments, the engines used to - create the worlds in video games offer top-notch physics and - graphics support. These engines also have limited support for - creating cameras and rendering 3D sound, which can be repurposed - for vision and hearing respectively. Physics collision detection - can be expanded to create a sense of touch. - - jMonkeyEngine3 is one such engine for creating video games in - Java. It uses OpenGL to render to the screen and uses screengraphs - to avoid drawing things that do not appear on the screen. It has an - active community and several games in the pipeline. The engine was - not built to serve any particular game but is instead meant to be - used for any 3D game. I chose jMonkeyEngine3 it because it had the - most features out of all the open projects I looked at, and because - I could then write my code in Clojure, an implementation of LISP - that runs on the JVM. - -** =CORTEX= Extends jMonkeyEngine3 to implement rich senses - - Using the game-making primitives provided by jMonkeyEngine3, I have - constructed every major human sense except for smell and - taste. =CORTEX= also provides an interface for creating creatures - in Blender, a 3D modeling environment, and then "rigging" the - creatures with senses using 3D annotations in Blender. A creature - can have any number of senses, and there can be any number of - creatures in a simulation. - - The senses available in =CORTEX= are: - - - [[../../cortex/html/vision.html][Vision]] - - [[../../cortex/html/hearing.html][Hearing]] - - [[../../cortex/html/touch.html][Touch]] - - [[../../cortex/html/proprioception.html][Proprioception]] - - [[../../cortex/html/movement.html][Muscle Tension]] - -* A roadmap for =CORTEX= experiments - -** Worm World - - Worms in =CORTEX= are segmented creatures which vary in length and - number of segments, and have the senses of vision, proprioception, - touch, and muscle tension. - -#+attr_html: width=755 -#+caption: This is the tactile-sensor-profile for the upper segment of a worm. It defines regions of high touch sensitivity (where there are many white pixels) and regions of low sensitivity (where white pixels are sparse). -[[../images/finger-UV.png]] - - -#+begin_html -
-
- -
YouTube -
-

The worm responds to touch.

-
-#+end_html - -#+begin_html -
-
- -
YouTube -
-

Proprioception in a worm. The proprioceptive readout is - in the upper left corner of the screen.

-
-#+end_html - - A worm is trained in various actions such as sinusoidal movement, - curling, flailing, and spinning by directly playing motor - contractions while the worm "feels" the experience. These actions - are recorded both as vectors of muscle tension, touch, and - proprioceptive data, but also in higher level forms such as - frequencies of the various contractions and a symbolic name for the - action. - - Then, the worm watches a video of another worm performing one of - the actions, and must judge which action was performed. Normally - this would be an extremely difficult problem, but the worm is able - to greatly diminish the search space through sympathetic - imagination. First, it creates an imagined copy of its body which - it observes from a third person point of view. Then for each frame - of the video, it maneuvers its simulated body to be in registration - with the worm depicted in the video. The physical constraints - imposed by the physics simulation greatly decrease the number of - poses that have to be tried, making the search feasible. As the - imaginary worm moves, it generates imaginary muscle tension and - proprioceptive sensations. The worm determines the action not by - vision, but by matching the imagined proprioceptive data with - previous examples. - - By using non-visual sensory data such as touch, the worms can also - answer body related questions such as "did your head touch your - tail?" and "did worm A touch worm B?" - - The proprioceptive information used for action identification is - body-centric, so only the registration step is dependent on point - of view, not the identification step. Registration is not specific - to any particular action. Thus, action identification can be - divided into a point-of-view dependent generic registration step, - and a action-specific step that is body-centered and invariant to - point of view. - -** Stick Figure World - - This environment is similar to Worm World, except the creatures are - more complicated and the actions and questions more varied. It is - an experiment to see how far imagination can go in interpreting - actions. diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/org/roadmap.org --- a/thesis/org/roadmap.org Fri Mar 21 00:08:49 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -In order for this to be a reasonable thesis that I can be proud of, -what are the /minimum/ number of things I need to get done? - - -* worm OR hand registration - - training from a few examples (2 to start out) - - aligning the body with the scene - - generating sensory data - - matching previous labeled examples using dot-products or some - other basic thing - - showing that it works with different views - -* first draft - - draft of thesis without bibliography or formatting - - should have basic experiment and have full description of - framework with code - - review with Winston - -* final draft - - implement stretch goals from Winston if possible - - complete final formatting and submit - -* CORTEX - DEADLINE: <2014-05-09 Fri> - SHIT THAT'S IN 67 DAYS!!! - -** program simple feature matching code for the worm's segments - -Subgoals: -*** DONE Get cortex working again, run tests, no jmonkeyengine updates - CLOSED: [2014-03-03 Mon 22:07] SCHEDULED: <2014-03-03 Mon> -*** DONE get blender working again - CLOSED: [2014-03-03 Mon 22:43] SCHEDULED: <2014-03-03 Mon> -*** DONE make sparce touch worm segment in blender - CLOSED: [2014-03-03 Mon 23:16] SCHEDULED: <2014-03-03 Mon> - CLOCK: [2014-03-03 Mon 22:44]--[2014-03-03 Mon 23:16] => 0:32 -*** DONE make multi-segment touch worm with touch sensors and display - CLOSED: [2014-03-03 Mon 23:54] SCHEDULED: <2014-03-03 Mon> - -*** DONE Make a worm wiggle and curl - CLOSED: [2014-03-04 Tue 23:03] SCHEDULED: <2014-03-04 Tue> - - -** First draft - -Subgoals: -*** Writeup new worm experiments. -*** Triage implementation code and get it into chapter form. - - - - - -** for today - -- guided worm :: control the worm with the keyboard. Useful for - testing the body-centered recog scripts, and for - preparing a cool demo video. - -- body-centered recognition :: detect actions using hard coded - body-centered scripts. - -- cool demo video of the worm being moved and recognizing things :: - will be a neat part of the thesis. - -- thesis export :: refactoring and organization of code so that it - spits out a thesis in addition to the web page. - -- video alignment :: analyze the frames of a video in order to align - the worm. Requires body-centered recognition. Can "cheat". - -- smoother actions :: use debugging controls to directly influence the - demo actions, and to generate recoginition procedures. - -- degenerate video demonstration :: show the system recognizing a - curled worm from dead on. Crowning achievement of thesis. - -** Ordered from easiest to hardest - -Just report the positions of everything. I don't think that this -necessairly shows anything usefull. - -Worm-segment vision -- you initialize a view of the worm, but instead -of pixels you use labels via ray tracing. Has the advantage of still -allowing for visual occlusion, but reliably identifies the objects, -even without rainbow coloring. You can code this as an image. - -Same as above, except just with worm/non-worm labels. - -Color code each worm segment and then recognize them using blob -detectors. Then you solve for the perspective and the action -simultaneously. - -The entire worm can be colored the same, high contrast color against a -nearly black background. - -"Rooted" vision. You give the exact coordinates of ONE piece of the -worm, but the algorithm figures out the rest. - -More rooted vision -- start off the entire worm with one posistion. - -The right way to do alignment is to use motion over multiple frames to -snap individual pieces of the model into place sharing and -propragating the individual alignments over the whole model. We also -want to limit the alignment search to just those actions we are -prepared to identify. This might mean that I need some small "micro -actions" such as the individual movements of the worm pieces. - -Get just the centers of each segment projected onto the imaging -plane. (best so far). - - -Repertoire of actions + video frames --> - directed multi-frame-search alg - - - - - - -!! Could also have a bounding box around the worm provided by -filtering the worm/non-worm render, and use bbbgs. As a bonus, I get -to include bbbgs in my thesis! Could finally do that recursive things -where I make bounding boxes be those things that give results that -give good bounding boxes. If I did this I could use a disruptive -pattern on the worm. - -Re imagining using default textures is very simple for this system, -but hard for others. - - -Want to demonstrate, at minimum, alignment of some model of the worm -to the video, and a lookup of the action by simulated perception. - -note: the purple/white points is a very beautiful texture, because -when it moves slightly, the white dots look like they're -twinkling. Would look even better if it was a darker purple. Also -would look better more spread out. - - -embed assumption of one frame of view, search by moving around in -simulated world. - -Allowed to limit search by setting limits to a hemisphere around the -imagined worm! This limits scale also. - - - - - -!! Limited search with worm/non-worm rendering. -How much inverse kinematics do we have to do? -What about cached (allowed state-space) paths, derived from labeled -training. You have to lead from one to another. - -What about initial state? Could start the input videos at a specific -state, then just match that explicitly. - -!! The training doesn't have to be labeled -- you can just move around -for a while!! - -!! Limited search with motion based alignment. - - - - -"play arounds" can establish a chain of linked sensoriums. Future -matches must fall into one of the already experienced things, and once -they do, it greatly limits the things that are possible in the future. - - -frame differences help to detect muscle exertion. - -Can try to match on a few "representative" frames. Can also just have -a few "bodies" in various states which we try to match. - - - -Paths through state-space have the exact same signature as -simulation. BUT, these can be searched in parallel and don't interfere -with each other. - - - - -** Final stretch up to First Draft - -*** DONE complete debug control of worm - CLOSED: [2014-03-17 Mon 17:29] SCHEDULED: <2014-03-17 Mon> - CLOCK: [2014-03-17 Mon 14:01]--[2014-03-17 Mon 17:29] => 3:28 -*** DONE add phi-space output to debug control - CLOSED: [2014-03-17 Mon 17:42] SCHEDULED: <2014-03-17 Mon> - CLOCK: [2014-03-17 Mon 17:31]--[2014-03-17 Mon 17:42] => 0:11 - -*** DONE complete automatic touch partitioning - CLOSED: [2014-03-18 Tue 21:43] SCHEDULED: <2014-03-18 Tue> -*** DONE complete cyclic predicate - CLOSED: [2014-03-19 Wed 16:34] SCHEDULED: <2014-03-18 Tue> - CLOCK: [2014-03-19 Wed 13:16]--[2014-03-19 Wed 16:34] => 3:18 -*** DONE complete three phi-stream action predicatates; test them with debug control - CLOSED: [2014-03-19 Wed 16:35] SCHEDULED: <2014-03-17 Mon> - CLOCK: [2014-03-18 Tue 18:36]--[2014-03-18 Tue 21:43] => 3:07 - CLOCK: [2014-03-18 Tue 18:34]--[2014-03-18 Tue 18:36] => 0:02 - CLOCK: [2014-03-17 Mon 19:19]--[2014-03-17 Mon 21:19] => 2:00 -*** DONE build an automatic "do all the things" sequence. - CLOSED: [2014-03-19 Wed 16:55] SCHEDULED: <2014-03-19 Wed> - CLOCK: [2014-03-19 Wed 16:53]--[2014-03-19 Wed 16:55] => 0:02 -*** DONE implement proprioception based movement lookup in phi-space - CLOSED: [2014-03-19 Wed 22:04] SCHEDULED: <2014-03-19 Wed> - CLOCK: [2014-03-19 Wed 19:32]--[2014-03-19 Wed 22:04] => 2:32 -*** DONE make proprioception reference phi-space indexes - CLOSED: [2014-03-19 Wed 22:47] SCHEDULED: <2014-03-19 Wed> - CLOCK: [2014-03-19 Wed 22:07] - - -*** DONE create test videos, also record positions of worm segments - CLOSED: [2014-03-20 Thu 22:02] SCHEDULED: <2014-03-19 Wed> - -*** TODO Collect intro, worm-learn and cortex creation into draft thesis. - diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/thesis.pdf Binary file thesis/thesis.pdf has changed diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/thesis.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/thesis.tex Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,46 @@ +% -*- Mode:TeX -*- + +%% IMPORTANT: The official thesis specifications are available at: +%% http://libraries.mit.edu/archives/thesis-specs/ +%% +%% Please verify your thesis' formatting and copyright +%% assignment before submission. If you notice any +%% discrepancies between these templates and the +%% MIT Libraries' specs, please let us know +%% by e-mailing thesis@mit.edu + +%% The documentclass options along with the pagestyle can be used to generate +%% a technical report, a draft copy, or a regular thesis. You may need to +%% re-specify the pagestyle after you \include cover.tex. For more +%% information, see the first few lines of mitthesis.cls. + +%\documentclass[12pt,vi,twoside]{mitthesis} +%% +%% If you want your thesis copyright to you instead of MIT, use the +%% ``vi'' option, as above. +%% +%\documentclass[12pt,twoside,leftblank]{mitthesis} +%% +%% If you want blank pages before new chapters to be labelled ``This +%% Page Intentionally Left Blank'', use the ``leftblank'' option, as +%% above. + +\documentclass[12pt,twoside]{mitthesis} +%\usepackage{lgrind} +\pagestyle{plain} + +\begin{document} + +\include{cover} +% Some departments (e.g. 5) require an additional signature page. See +% signature.tex for more information and uncomment the following line if +% applicable. +% \include{signature} +\pagestyle{plain} +\include{contents} +\include{cortex} +\include{chap2} +\appendix +\include{biblio} +\end{document} + diff -r c2c28c3e27c4 -r 6b0f77df0e53 thesis/weave-thesis.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thesis/weave-thesis.sh Fri Mar 21 01:17:41 2014 -0400 @@ -0,0 +1,15 @@ +#!/bin/sh + +emacs \ +-l /home/r/config/emacs/clojure-init.el \ +-l /home/r/config/emacs/org-init.el \ +-l /home/r/config/emacs/thesis-color.el \ +--batch \ +--eval " +(progn + (find-file \"/home/r/proj/cortex/thesis/cortex.org\") + (org-latex-export-to-latex nil nil nil t nil))" \ +\ +2>&1 + +rm cortex.tex~ \ No newline at end of file