User:Juan
From LagoonWiki
About Me
If you would like to know more, visit my homepage.
Current Work
This is the XUL application I will be evolving.
Click here for more snapshots: http://www.cse.unr.edu/~quiroz/misc
Results: Which individuals in the population do we display for evaluation? Best, random, or best and worst?
Fixed Display Number
Population 50, Display 10
- Displaying the 5 best and 5 worst individuals
- The max, average, and min individuals in the population are better than displaying random individuals
- The max, avg, and min individuals in the population are better than displaying the best individuals for evaluation
- Best individuals produces better results than displaying random individuals
Population 20, Display 10
- Displaying the 5 best and 5 worst individuals
- The max, avg, and min individuals in the population are better than displaying random individuals
- The max, avg, and min individuals in the population are better than displaying the best individuals
- Random individuals produces better results than displaying the best individuals
Population 100, Display 10
- Both best and best_worst produces slightly better results than random individuals
- Best and best_worst behave about the same
- Same results were observed with Population 200, display 10
Fixed Population Size, Fixed Display Number
- Displaying only the best individuals in the population and the best_worst individuals in the population seems to produce similar results.
- The smaller the number of individuals displayed, the greater the gap in performance between (best,best_worst) and random display
- On a population of 50, with varying display size
- It seems that displaying best_worst seems to perform better than random or best display.
- As we display less individuals, the gap in performance between best_worst and (random,best) seems to increase.
- If we display the best individuals in the population for user evaluation, then the smaller the population sample display, the faster the population converges and the greatest the maximum it can reach.
- It seems that displaying the best and worst individuals in the population leads to faster convergence, and reaching a higher maximum when compared to best display and random display.
- The best display and worst_best display reinforce the notion that the smaller the population sample displayed for user evaluation, the faster the population converges and the greatest maximum it can reach.
Representation
Relative Positioning
For relative positioning, each individual contains two chromosomes. One chromosome contains a list of the widget IDs, and the other chromosome contains the characteristics of each widget, such as relative position and color. Mutation and crossover only affect the widgets chromosome. The reasoning for having the two chromsomes was to keep the XO and mutation operators from destroying the representation, since widget IDs are not stored in binary.
Absolute Positioning
For absolute positioning, each individual consists of two chromosomes. One chromosome encodes the grid layout, a permutation of widget IDs and empty cells, and the other chromosome encodes the characteristics of each widget. For now the only characteristic being color. Single point crossover is used on the widget characteristics chromosome, while PMX is used on the grid layout chromosome. Mutation only affects the chracteristics chromosome.
Objective Heuristics
- Alignment
- Vertical Alignment
- Compare x (top) coordinates of widgets, aligned widgets should all have the same x coordinate
- Horizontal Alignment
- Compare y (left) coordinates of widgets, aligned widgets should all have the same y coordinate
- Vertical Alignment
- Center equalization
- Compare the area covered on the left and on the right of an imaginary line through the middle of the window
- Sum the area covered on the left of the imaginary line; sum the area covered on the right; the smallest the difference between the two is, the highest the fitness is awarded
- Layout
- Space between controls
- Check that the spacing between row elements is n pixels, by making sure that the difference between the y coordinate of the bottom of widget on the top row and the top of the widget on the row below is n.
- Margins
- Top Margin
- Check to see that the y coordinates of all widgets are greater than some constant n.
- Left Margin
- Check to see that the x coordinates of all widgets are greater than some constant n.
- Right Margin
- Check to see that x+widget_width < window_width for all widgets
- Bottom Margin
- Check to see that y+widget_height < window_height for all widgets
- Top Margin
- Window fit
- Check that all widgets are contained within the alloted space. Check x+width < window_width and y+height < window_height for all widgets.
- Space between controls
- Color contrast
- Take the difference of the RGB values of the widget font and the widget background.
- High values for the difference indicate good contrast, while low values indicate bad contrast.
- Contrast between widgets should be low; contrast within a widget should be high
Other Notes
- How much information does the user specify?
- Is the user responsible for specifying the size of each widget?
- If this is not the case, then I need a set of default dimensions for all widgets.
Subjective Heuristics
- Color
- Positioning
- Grouping
- Layout
Research Significance
My research is important because:
- Expert knowledge acquisition bottleneck
- UI design is a time consuming, expensive, and challenging task. So the ability to be able to automate some of the process, such as fine-tunning of a UI appearance, can have a significant impact on user interface development.
- UI evolution allows the user to explore the space of user interfaces with a common look and feel. This allows the user to be exposed to interfaces that they would not have conceived of in a matter of minutes.
- A large set of user interfaces can be explored quickly, providing the user interface designer with the insight and creativity to finalize prototypes.
Potential Conferences
IARIA
- ICIW 2007: The Second International Conference on Internet and Web Applications and Services
- December 1, 2006
- KUI 2007 (part of ICAS 2007): The First International Workshop on Knowledge-based User Interface
- December 20, 2006
- SARP 2007 (part of ICDT 2007): The First International Workshop on Software Architecture Research and Practice
- January 20, 2007
- ICSEA 2007: The Second International Conference on Software Engineering Advances
- March 1 , 2007
Others
- ICMLC 2007: International Conference on Machine Learning and Cybernetics
- IEEE SMC 2007: IEEE International Conference on System, Man, and Cybernetics
- GECCO 2007: Genetic and Evolutionary Computation Conference
- CHI 2007
Lagoon Stuff
CEGUI
If you are using Ubuntu and wish to use CEGUI, then install CEGUI from source. I am running Ubuntu Dapper Drake (6.0...), and whenever I tried to run my application with CEGUI, it would crash and give me an "undefined symbol" error on one of the CEGUI libraries. The application compiled, but it would crash during runtime. For some reason, the synaptic install doesn't install the OpenGL renderer library. I installed CEGUI from source, and my application then worked. Make sure you run ldconfig after you install CEGUI.
SP Behavior Task Bug Fix
- catPlaybackPanel.py:
if hasvar('/comm/groups/%s' % self.entity.getName(), 'objective'):
pushsel('/comm/groups/%s' % self.entity.getName())
ss('objective', )
popsel()
- Version: Dragonite/hypno/code/scripts
Move To
- common/rmenu.py: RMenuItem(MOVETO,RMENU_BEHAVIOR_CHANGE)
- entitySet.py: handleBehaviorChange(...)
- self.postEntityMessage(self.currentEntPath,"behaviorChange",msg)
- nEventServer.pull(EventNames.CAT_ENTITY_MESSAGE,entPath + ' ' + cmd + ' ' + msg)
- nEventServer.register(EventNames.CAT_ENTITY_MESSAGE, self.handleEntityMessage)
- handleEntityMessage(...)
- entity.handleEntityMessage(...)
- entity.py: self.handleBehaviorChange(msg)
- behavior.start()
- self.displayBehavior()
Handle State Switch
- catElementaryPanel.py: self.postBehaviorMessage('handleStateSwitch')
- catElementaryPanel: nEventServer.pull(EventNames.CAT_BEHAVIOR_MESSAGE,self.entity.entPath + ' ' + self.bname + ' ' + cmd + ' ' + msg)
- entitySet.py: nEventServer.register(EventNames.CAT_BEHAVIOR_MESSAGE, self.handleBehaviorMessage)
- entitySet.py: self.handleBehaviorMessage(...)
- entity.handleBehaviorMessage(...)
- entity.py: self.handleBehaviorMessage(...)
- behavior = self.getBehavior(bname)
- behavior.handleBehaviorMessage(msg)
- catPrimitiveBehavior.py: handleBehaviorMessage(...)
- handleStateSwitch()
SP Attach Controller
- common/quickcommands.py:nEventServer.register(RMENU_ASSIGN_OBJECTIVE, assignObjective )
- sp assigns objective and sets a flag
- executive/executive.py: checks if flag is dirty, if so, parses objectives from EVA, and calls cat.AttachController(...) (in cat/__init__.py)
- cat/__init__.py: calls catGUI.AttachController()
- cat/Interface/catGUI.py: calls entitySet.AttachController()
- cat/entity/entitySet.py:
- calls sp.attachController()
- calls entity.setMode(mode)
- calls entity.handleInitRequest(...)
- calls entity.handlePlayRequest(...)
7-19-2006
I'm currently working on revising CAT. The revision consists of using the EVA tree as an interface layer between the UI and everything else.
This week I have been continuing working with David on revising CAT so that we are able to run Lagoon with no graphics and no GUI on the cluster client.
The design we decided on consists of making a single GUI, which communicates with everything else in Lagoon through the EVA tree. The steps that I will be performing are as follows:
- Replace all calls to the behaviors to set and get variables with set and get calls to a module which writes and reads changes to the EVA tree.
- Go through the GUI and remove references to behaviors
- Go through the GUI and CAT entities and make the GUI a separate module
- Connect the GUI with CAT and everything else
As of today I have replaced all behavior calls and created a simple GUI manager that reads and writes behavior parameters to the EVA tree. Once this is tested, I will continue by trying to separate the behavior panels from the behaviors. Or maybe I'll just get a GUI working without any references to behaviors or entities, then I can continue working on the interface between the GUI and CAT.
7-31-2006
As of Friday of last week I have been revising the GUI so that there is only a single instance of the GUI, instead of each entity having an instance of the GUI. I am doing this in an incremental fashion in order to do unit testing. Currently I have a single instance of the button panel and the entity panel working. The recorder, the triggers, and the behavior panels are still instantiated for every entity. I have not submitted the changes I have made, but I have kept my work updated to avoid future problems when I decide to check in my work to the repository.
I have some bugs with the changes I have made, so I have been debugging those as well.
By today I have finished the CatEntityPanel and the triggers panel. I found a bug with the cluster server code. However, David and I decided it would be best to work around it for now. The quick fix consists of each entity having a pointer to the GUI, instead of having only the active entity point to the GUI. In fact, this turned out to be much better, and will probably help make the code more stable in this transition to a single instance of the GUI.
Research
I'm currently working on the background for my thesis. My research is on evolutionary development of user interfaces. We would like to use an interactive genetic algorithm to guide the evolution of user interfaces, and by doing so explore user interface aesthetics, styles, and guidelines of user interface design and development.
Notes / Random Thoughts
7-17
I don't know the type of the variable in EVA, because it is a generic get variable function. Hence, the value must be stored as a string. On the other hand I can store the type with the variable name. Retrieve the type first, and then get the value based on the variable type.
7-19
GUI - EVA Manager
When we have one GUI, there will be only one GUI EVA manager (for the server). Something must set the entity on the manager everytime a new entity is created or selected, so the correct entity on the EVA tree is updated.
For now I have decided it is a better idea to put the gui manager in the entitySet, which seems a lot more realistic, and which reflects the fact that in the future there will only be one GUI manager. So every time an entity is created or an entity is selected, the entity reference on the GUI manager must be set by making the SetEntity call in the GUI manager.
Currently the GUI manager is accessed through a reference in CAT entity. Later, when we have one GUI, then the GUI will have a pointer to the GUI manager, instead of having to access the manager through entity (entity.guiManager).
7-20
Behavior calls that need to be added to the GUI manager.
- self.behavior.handleStateSwitch()
- self.behavior.getName()
- self.behavior.startStop
- self.behavior.getTarget()
- self.behavior.setTarget()
- self.behavior.stop()
The purpose of the GUI is to let the user interact with the system in an intuitive way. Hence, the GUI should display system information, and communicate with the system via events. Hence, the CAT GUI, including the behaviors GUI should display information. The only state the GUI needs is the currently selected entity. At no point does the GUI display the information of two entities at the same time. So how does the GUI display information about an entity? Some module or event needs to tell the GUI which is the current active entity. By knowing the current entity, we can tell the GUI the entity EVA path, so that it
can access all the information needed to fill the GUI widgets.
What about behaviors? If a variable is changed in a behavior panel, then the panel knows its name. Hence, it can tell the GUI manager that the behavior name associated with the panel is being changed, so that the changes of the behavior in the current entity's EVA path is changed. But when running behavior networks, the behavior name will vary. As it should, to reflect the fact that there can be multiple instances of a primitive behavior. In this case, how is this information sent to the GUI, and does the GUI know which behavior instance to change in the EVA tree?
7-28
catCommand
- Only GUI module
- Will initially consist of catEntityPanel. Other GUI components will be added iteratively. The methodology behind this is unit and module testing.
- I'm revising the catButtonPanel because my design decision to pass the recorder wrapper.
- The catButtonPanel should switch the color of all the GUI panels and it should switch the recorder panel accordingly. So the buttonPanel should send an event to the panel holding all other GUI components to switch their colors and to switch the recorder. It doesn't make sense to have the buttonPanel switching the recorders when the other panels have a similar change as well.


