<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Mario Meiosis</title>
	<atom:link href="http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/</link>
	<description>After all, it could only cost you your life, and you got that for free.</description>
	<pubDate>Thu, 04 Dec 2008 21:03:47 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
		<item>
		<title>By: Wes Allen</title>
		<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/#comment-931</link>
		<dc:creator>Wes Allen</dc:creator>
		<pubDate>Fri, 30 Jun 2006 04:26:27 +0000</pubDate>
		<guid isPermaLink="false">http://web.ics.purdue.edu/~kuliniew/wp/archives/2006/06/26/mario-meiosis/#comment-931</guid>
		<description>That last sentence should read, "...and would thus give scroll-to-the-right and &lt;strike&gt;score&lt;/strike&gt; &lt;strong&gt;time&lt;/strong&gt; high emphasis."</description>
		<content:encoded><![CDATA[<p>That last sentence should read, &#8220;&#8230;and would thus give scroll-to-the-right and <strike>score</strike> <strong>time</strong> high emphasis.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Wes Allen</title>
		<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/#comment-930</link>
		<dc:creator>Wes Allen</dc:creator>
		<pubDate>Fri, 30 Jun 2006 04:24:26 +0000</pubDate>
		<guid isPermaLink="false">http://web.ics.purdue.edu/~kuliniew/wp/archives/2006/06/26/mario-meiosis/#comment-930</guid>
		<description>Well, Paul, I &lt;a href="http://www.digg.com"&gt;dugg&lt;/a&gt; this post.  I like the idea and think you should get some code working to do this.  Unlike Tripod, I would say that dying is one of the lesser important issues in the game.  I believe the highest metric should be completing the level, with a tie-breaker of some formula combining time and score.

After that, as you so eloquently put in your post, it is a head-scratcher.  Personally, I would do a formula mixture of "scroll-to-the-right," score, and time.  I think these all have to be taken into account, with their weights depending on your personal preference on "optimal" gameplay.  I, myself, would be keenly interested in seeing the fastest possible Mario completion possible w/o a concern over warps and the such, and would thus give scroll-to-the-right and score high emphasis.</description>
		<content:encoded><![CDATA[<p>Well, Paul, I <a href="http://www.digg.com">dugg</a> this post.  I like the idea and think you should get some code working to do this.  Unlike Tripod, I would say that dying is one of the lesser important issues in the game.  I believe the highest metric should be completing the level, with a tie-breaker of some formula combining time and score.</p>
<p>After that, as you so eloquently put in your post, it is a head-scratcher.  Personally, I would do a formula mixture of &#8220;scroll-to-the-right,&#8221; score, and time.  I think these all have to be taken into account, with their weights depending on your personal preference on &#8220;optimal&#8221; gameplay.  I, myself, would be keenly interested in seeing the fastest possible Mario completion possible w/o a concern over warps and the such, and would thus give scroll-to-the-right and score high emphasis.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Renee</title>
		<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/#comment-929</link>
		<dc:creator>Renee</dc:creator>
		<pubDate>Tue, 27 Jun 2006 23:36:07 +0000</pubDate>
		<guid isPermaLink="false">http://web.ics.purdue.edu/~kuliniew/wp/archives/2006/06/26/mario-meiosis/#comment-929</guid>
		<description>Ya'll have spent far far to much time thinking about this!
And I didn't know you could do that select/start move on Donkey Kong. Dang, that would have come in handy!</description>
		<content:encoded><![CDATA[<p>Ya&#8217;ll have spent far far to much time thinking about this!<br />
And I didn&#8217;t know you could do that select/start move on Donkey Kong. Dang, that would have come in handy!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ryan</title>
		<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/#comment-928</link>
		<dc:creator>Ryan</dc:creator>
		<pubDate>Tue, 27 Jun 2006 10:28:04 +0000</pubDate>
		<guid isPermaLink="false">http://web.ics.purdue.edu/~kuliniew/wp/archives/2006/06/26/mario-meiosis/#comment-928</guid>
		<description>I disagree about tossing out Start/Select.  Let's say the solution randomly mutates into the Contra Code (while playing Contra, or some other code applicable to the game at hand...er, at code).  Would that not be a badass mutation?  Moreover, what if you found a real-life example of that?

Also, I remember at least one game (one of the Donkey Kong games, I believe) that allowed you to hit select then start to exit a level...doing so near the bottom of a chasm you carelessly jumped into proved a very beneficial strategy.</description>
		<content:encoded><![CDATA[<p>I disagree about tossing out Start/Select.  Let&#8217;s say the solution randomly mutates into the Contra Code (while playing Contra, or some other code applicable to the game at hand&#8230;er, at code).  Would that not be a badass mutation?  Moreover, what if you found a real-life example of that?</p>
<p>Also, I remember at least one game (one of the Donkey Kong games, I believe) that allowed you to hit select then start to exit a level&#8230;doing so near the bottom of a chasm you carelessly jumped into proved a very beneficial strategy.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul Kuliniewicz</title>
		<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/#comment-927</link>
		<dc:creator>Paul Kuliniewicz</dc:creator>
		<pubDate>Tue, 27 Jun 2006 05:00:47 +0000</pubDate>
		<guid isPermaLink="false">http://web.ics.purdue.edu/~kuliniew/wp/archives/2006/06/26/mario-meiosis/#comment-927</guid>
		<description>I don't think penalizing for lives lost buys you very much, since the only two end results are "win" and "lose &lt;i&gt;n&lt;/i&gt; + 3 lives", where &lt;i&gt;n&lt;/i&gt; is the number of 1-ups you get.  Penalize deaths and you essentially penalize getting 1-ups for all non-winning runs.

Similarly, there shouldn't be a need to weight certain buttons more heavily when randomly generating candidate solutions.  After all, solutions with a lot of "bad" moves should get culled from the population pretty quickly.  Though I suppose there would be a lot to be said to throw Select and Start out of consideration entirely, since pausing would never be helpful and Select does nothing in-game anyway.

One interesting metric I didn't think of originally is penalizing every time the candidate solution presses or releases a button.  Factoring that in should favor "smoother" or more "elegant" solutions -- it's better to hold Right for a while than to repeatedly press and release it.

On the other hand, in my (admittedly limited) understanding of using genetic algorithms, it's best for the fitness function to just consider how close a candidate solution is to some "ideal" solution, rather than trying to coax it into strategies you think are beneficial.  After all, part of what makes this approach interesting is its ability to "invent" novel approaches, and perhaps some of the things we might want to rule out could turn out to be helpful in some cases.

In any event, actually being able to play around with an implementation of this stuff would hopefully settle a lot of these questions.  I just have to get my hands on the source code for a good NES emulator....</description>
		<content:encoded><![CDATA[<p>I don&#8217;t think penalizing for lives lost buys you very much, since the only two end results are &#8220;win&#8221; and &#8220;lose <i>n</i> + 3 lives&#8221;, where <i>n</i> is the number of 1-ups you get.  Penalize deaths and you essentially penalize getting 1-ups for all non-winning runs.</p>
<p>Similarly, there shouldn&#8217;t be a need to weight certain buttons more heavily when randomly generating candidate solutions.  After all, solutions with a lot of &#8220;bad&#8221; moves should get culled from the population pretty quickly.  Though I suppose there would be a lot to be said to throw Select and Start out of consideration entirely, since pausing would never be helpful and Select does nothing in-game anyway.</p>
<p>One interesting metric I didn&#8217;t think of originally is penalizing every time the candidate solution presses or releases a button.  Factoring that in should favor &#8220;smoother&#8221; or more &#8220;elegant&#8221; solutions &#8212; it&#8217;s better to hold Right for a while than to repeatedly press and release it.</p>
<p>On the other hand, in my (admittedly limited) understanding of using genetic algorithms, it&#8217;s best for the fitness function to just consider how close a candidate solution is to some &#8220;ideal&#8221; solution, rather than trying to coax it into strategies you think are beneficial.  After all, part of what makes this approach interesting is its ability to &#8220;invent&#8221; novel approaches, and perhaps some of the things we might want to rule out could turn out to be helpful in some cases.</p>
<p>In any event, actually being able to play around with an implementation of this stuff would hopefully settle a lot of these questions.  I just have to get my hands on the source code for a good NES emulator&#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ryan</title>
		<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/#comment-926</link>
		<dc:creator>Ryan</dc:creator>
		<pubDate>Mon, 26 Jun 2006 20:43:18 +0000</pubDate>
		<guid isPermaLink="false">http://web.ics.purdue.edu/~kuliniew/wp/archives/2006/06/26/mario-meiosis/#comment-926</guid>
		<description>SO COOL!</description>
		<content:encoded><![CDATA[<p>SO COOL!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Emanuel</title>
		<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/#comment-925</link>
		<dc:creator>Mark Emanuel</dc:creator>
		<pubDate>Mon, 26 Jun 2006 17:20:37 +0000</pubDate>
		<guid isPermaLink="false">http://web.ics.purdue.edu/~kuliniew/wp/archives/2006/06/26/mario-meiosis/#comment-925</guid>
		<description>Paul;
This is a fascinating question, one that I myself pondered as a kid.

Perhaps you could build a simple virtual mock up of level 1-1 and incorporate your own metrics that can be measured definitively- at least this would save you the effort of having to try to measure values obtained from the actual game.

Of course, you could always get a *real* job and not waste your time with such problems.</description>
		<content:encoded><![CDATA[<p>Paul;<br />
This is a fascinating question, one that I myself pondered as a kid.</p>
<p>Perhaps you could build a simple virtual mock up of level 1-1 and incorporate your own metrics that can be measured definitively- at least this would save you the effort of having to try to measure values obtained from the actual game.</p>
<p>Of course, you could always get a *real* job and not waste your time with such problems.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Tubergen</title>
		<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/#comment-924</link>
		<dc:creator>John Tubergen</dc:creator>
		<pubDate>Mon, 26 Jun 2006 16:47:28 +0000</pubDate>
		<guid isPermaLink="false">http://web.ics.purdue.edu/~kuliniew/wp/archives/2006/06/26/mario-meiosis/#comment-924</guid>
		<description>You know, I should probably be relaxing on lunch break, but this is so much more interesting.</description>
		<content:encoded><![CDATA[<p>You know, I should probably be relaxing on lunch break, but this is so much more interesting.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Tubergen</title>
		<link>http://www.kuliniewicz.org/blog/archives/2006/06/26/mario-meiosis/#comment-923</link>
		<dc:creator>John Tubergen</dc:creator>
		<pubDate>Mon, 26 Jun 2006 16:46:12 +0000</pubDate>
		<guid isPermaLink="false">http://web.ics.purdue.edu/~kuliniew/wp/archives/2006/06/26/mario-meiosis/#comment-923</guid>
		<description>I think that dying shold be more strongly weighed as a negative factor.  There are videos of people beating the game in less than half an hour, and never dying.  Therefore, since dying wastes time, and the goal of the game is to defeat the boss, dying is almost always counter-productive.  Even in the even you described of repeating a level to get extra lives and scores, that is based on the idea of needing extra lives later, but this idea is to generate a program that won't die (or at least will die alot, but restarting, instead of trying over), so extra lives shouldn't really be heavily weighted.

I would say priorities should go:
a)  not dying  (since the game can be beaten without dying, death is sub-optimal performance)
b)  level advancement (measured by what world you're on and screen scroll rate)
c)  time  (possibly tie this in with level advancement, as in screen scroll RATE)
c)  score
d)  extra lives (possibly work into a function of score, since the idea is you never need to use them)

Also, the criteria themselves could be graded by how fast they produce the optomized code for completing a stage.  Criteria would be based on how many iterations are required to produce a winning combination.  Furthermore, the order of random trials could be tweaked.  Say for instance that 01000000 is moving right, and 11000000 is jumping right.  When running iterations, if it starts from 00000000 and moves up, most of the initial trials won't involve much jumping.  It's quite likely (and from observing the speed trials of people who perform nearly perfectly) that the majority of an optimal iteration of winning moves is spent jumping.  Therefore, in the controller input, instead of initially trying 00000000 and counting up, it would be faster to start at 11111111 and count down.  This may be more applicable to some leves that are more conducive to almost continuous jumping, but it still has the potential of seriously impacting calculation time.  Another excellent (and simpler example, I wish I had thought of this first), would be running right, as opposed to running left (something that is rarely, if ever, needed in Mario Brothers), and thus it would be preffered if the program always attempted running right before trying a solution that involves running left.</description>
		<content:encoded><![CDATA[<p>I think that dying shold be more strongly weighed as a negative factor.  There are videos of people beating the game in less than half an hour, and never dying.  Therefore, since dying wastes time, and the goal of the game is to defeat the boss, dying is almost always counter-productive.  Even in the even you described of repeating a level to get extra lives and scores, that is based on the idea of needing extra lives later, but this idea is to generate a program that won&#8217;t die (or at least will die alot, but restarting, instead of trying over), so extra lives shouldn&#8217;t really be heavily weighted.</p>
<p>I would say priorities should go:<br />
a)  not dying  (since the game can be beaten without dying, death is sub-optimal performance)<br />
b)  level advancement (measured by what world you&#8217;re on and screen scroll rate)<br />
c)  time  (possibly tie this in with level advancement, as in screen scroll RATE)<br />
c)  score<br />
d)  extra lives (possibly work into a function of score, since the idea is you never need to use them)</p>
<p>Also, the criteria themselves could be graded by how fast they produce the optomized code for completing a stage.  Criteria would be based on how many iterations are required to produce a winning combination.  Furthermore, the order of random trials could be tweaked.  Say for instance that 01000000 is moving right, and 11000000 is jumping right.  When running iterations, if it starts from 00000000 and moves up, most of the initial trials won&#8217;t involve much jumping.  It&#8217;s quite likely (and from observing the speed trials of people who perform nearly perfectly) that the majority of an optimal iteration of winning moves is spent jumping.  Therefore, in the controller input, instead of initially trying 00000000 and counting up, it would be faster to start at 11111111 and count down.  This may be more applicable to some leves that are more conducive to almost continuous jumping, but it still has the potential of seriously impacting calculation time.  Another excellent (and simpler example, I wish I had thought of this first), would be running right, as opposed to running left (something that is rarely, if ever, needed in Mario Brothers), and thus it would be preffered if the program always attempted running right before trying a solution that involves running left.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
