ptft
Class JCellularAutomata

java.lang.Object
  extended byjava.awt.Component
      extended byjava.awt.Container
          extended byjavax.swing.JComponent
              extended byjavax.swing.JPanel
                  extended byptft.JGrid
                      extended byptft.JCellularAutomata
All Implemented Interfaces:
javax.accessibility.Accessible, java.awt.image.ImageObserver, java.awt.MenuContainer, java.lang.Runnable, java.io.Serializable
Direct Known Subclasses:
JPtftCellularAutomata

public class JCellularAutomata
extends JGrid
implements java.lang.Runnable

A graph paper grid populated with JCell objects which play localized cellular automata games. Each cell can have one of eight possible Markov strategies specifying how to respond to neighboring cells:

0 = 000 = AllD (always defect)
1 = 001
2 = 010 = STFT (suspicious tit-for-tat: D-then-TFT)
3 = 011 = D-then-AllC (defect only the first time)
4 = 100 = C-then-AllD (cooperate only the first time)
5 = 101
6 = 110 = TFT (tit-for-tat: C-then-TFT)
7 = 111 = AllC (always cooperate)

Calling playRound evolves the cellular automata one gerenation by having each cell play 200 games against each of its eight neighboring cells. The points from each of the eight interactions are added up and become the cell's score. Each cell then adopts the strategy of its most successful neighbor -- the neighboring cell with the highest score. The updating is instantenous; the entire array is switched to the new strategies in one shot, not cell by cell.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
Nested classes inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
protected  int[][] m_payoffs
           
protected  int m_sleepDelay
           
protected  java.lang.Thread m_thread
           
 
Fields inherited from class ptft.JGrid
innerPanel, m_cellPadding, m_cellWidth, m_columns, m_grid, m_rows, m_strategies
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
JCellularAutomata()
          Creates a cellular automata grid with the following default prisoner's dilemma payoff matrix:
C D
 C  (3,3) (0,5)
 D  (5,0) (1,1)
 
Method Summary
protected  int getWinningStrategy(JCell cell)
           
 boolean isRunning()
           
 void pause()
           
protected  int playCell(int x, int y)
          have a cell play all of its neighbors
protected  int playNeighbor(int x, int y, Direction d)
           
 void playRound()
          calls playRound with repaint = true
 void playRound(boolean repaint)
          Evolves the cellular automata one gerenation by having each cell play 200 games against each of its eight neighboring cells.
 void restart()
           
 void run()
           
 void setPayoffs(int dd, int dc, int cd, int cc)
          Set the payoffs for any symmetrical 2x2 payoff matrix.
 void setSleepDelay(int sleepDelayMS)
           
 void start()
           
 
Methods inherited from class ptft.JGrid
createCells, getCell, getLeftColumn, getLowerRow, getNeighbor, getRightColumn, getTotalColumns, getTotalRows, getUpperRow, paintComponent, setBackground, setBorderColor, setGridColor, setLayout, setRandomStrategies, setRandomStrategies
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getGraphics, getHeight, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isPreferredSizeSet, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBorder, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFont, setForeground, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getName, getParent, getPeer, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

m_payoffs

protected int[][] m_payoffs

m_thread

protected java.lang.Thread m_thread

m_sleepDelay

protected int m_sleepDelay
Constructor Detail

JCellularAutomata

public JCellularAutomata()
Creates a cellular automata grid with the following default prisoner's dilemma payoff matrix:
C D
 C  (3,3) (0,5)
 D  (5,0) (1,1)

Method Detail

getWinningStrategy

protected int getWinningStrategy(JCell cell)

playRound

public void playRound()
calls playRound with repaint = true


playRound

public void playRound(boolean repaint)
Evolves the cellular automata one gerenation by having each cell play 200 games against each of its eight neighboring cells. The points from each of the eight interactions are added up and become the cell's score. Each cell then adopts the strategy of its most successful neighbor -- the neighboring cell with the highest score. The updating is instantenous; the entire array is switched to the new strategies in one shot, not cell by cell.

Parameters:
repaint - You might want not to repaint the grid. For instance, you might want to display only every tenth generation or perhaps display only the final state. Dropping frames in this way might make the cellular automata evolve faster, and so could be used as a performance optimization technique.

playNeighbor

protected int playNeighbor(int x,
                           int y,
                           Direction d)

playCell

protected int playCell(int x,
                       int y)
have a cell play all of its neighbors


setPayoffs

public void setPayoffs(int dd,
                       int dc,
                       int cd,
                       int cc)
Set the payoffs for any symmetrical 2x2 payoff matrix.
 C  D 
 C  cc cd
 D  dc dd

Parameters:
dd - points awarded for mutual defection
dc - points awarded for unilateral defection
cd - points awarded for unilateral cooperation
cc - points awarded for mutual cooperation

restart

public void restart()

start

public void start()

pause

public void pause()

run

public void run()
Specified by:
run in interface java.lang.Runnable

isRunning

public boolean isRunning()

setSleepDelay

public void setSleepDelay(int sleepDelayMS)
Parameters:
sleepDelayMS - sleep delay between playRound frames in milliseconds