<div dir="ltr"><div dir="ltr">Paul,<div><br></div><div><div>wrt this GPT4 interaction - </div><div>Comparing Behavior Tree and Subsumption Architectures</div><div><a href="https://chat.openai.com/share/994e01a0-b757-4a33-b92c-12d145dde8ac" style="font-family:Aptos,sans-serif;font-size:11pt;color:rgb(70,120,134)">https://chat.openai.com/share/994e01a0-b757-4a33-b92c-12d145dde8ac</a></div><div><br class="gmail-Apple-interchange-newline">Thanks for the detailed analysis!</div><div><br></div><div>FWIW - I suggest looking at the last two implementations, not the first stab / 'unrefined' ones...</div><div><br></div><div>Yes - I've viewed the framework code provided by GPT with skeptical suspicion - but I haven't analyzed it to the level you did.</div><div><br></div><div>However - even with the issues you describe - even with those obvious errors - I still have an impression that the general gist of what it provided is aimed in the right direction (overall combination of narrative text and code). Or maybe that's wishful thinking ;-)</div><div><br></div><div>Specifically, I have a sense that</div><div><br></div><div>1. the general categorization and descriptions of each style is generally right / that the errors and issues largely lie in the detailed implementation/ execution.</div><div><br></div><div>2. that the general code structure is at least mostly grammatically & syntactically correct - even if it has functional design errors.  </div><div>I am accustomed and comfortable to solving design errors (mine, my resource, etc.). Unfortunately, I only infrequently dip into various languages, hence I often struggle to produce more elegant coding structures from scratch. I suffer from generalist syndrome - jack of all trades / master of nothing...  </div><div>Hence - even with errors - this interaction gives me specific coding language and structure <b><i>ideas to start with and hack on</i></b>.</div><div><br></div><div><div>3. most of the time - wrt the templates and examples I find online ( blogs, <a href="http://stackoverflow.com/" target="_blank">stackoverflow.com</a>, etc...) - those are anyhow<b> always rife with unstated assumptions and issues one must fix </b>or adapt to one's own situation.  </div><div>I see ChatGPT as no different in that regard - except that its noisy output starts with much better alignment to my specific query than generic internet searches. And the rapid interactive nature provides benefits not easy to achieve with traditional research methods.</div></div><div><br></div><div>4. I view this GPT as a provocative & interactive 'fencing tool style' learning tool. I bet I could get up to speed (to a level that interests me) much more quickly and/or more thoroughly by starting with interactions like this vs. e.g. blogs / stack overflow / papers, etc...</div><div><br></div><div><br></div><div>About these points you made</div><div><br></div><div>Paul</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">E.g. if it's not yet time for the EnvironmentSensor to take another reading, or the next reading is not ready, it should return false so that the next lower priority behavior in the Selector can run.<br></blockquote><div><br></div><div>Carl</div><div>Agreed - GPT left 'false' branches for the reader to sort out. That felt obvious enough that I didn't press GPT to clarify. </div><div><br></div><div>Anyhow, about "not yet time" - I always follow a fundamental design pattern that samples <b>all sensors </b>on a strict periodic basis, as fast as possible or as needed for the fastest sensor, whether individual sensor data is needed or not.  I prefer to trigger readings with a hardware timer interrupt in order to minimize timing variance. After sampling all sensors at the fastest possible rate, then I perform business logic, then after that I apply command output to motors.  </div><div>Hence, with my robots, the sample rate timing to motors tends to have a wider variance than sensor measurement variance (due to business logic timing variance adding onto sensor readout variance), but motor updates still occur with the same average period as sensor readings - still typically much faster than is really needed.</div><div><br></div><div>I see a similar structure or approach in both of the GPT frameworks. Hence - at a high level - GPT checked that box for me.  </div><div>However, I would certainly modify the GPT4 framework to rely on interrupts instead of the less controlled method "delay() at end of loop".</div><div><br></div><div>Paul</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Also, the subsumption code looks backward to me. <br></blockquote><div><br></div><div>Carl</div><div>It may well be.  </div><div><br></div><div>It does seem that a kind of duality exists between Behavioral and Subsumption - albeit from 'opposite ends of the candle'. I need to do another review - and maybe ground truth the GPT narrative against citable resources. I haven't completely reconciled the portrayals of "top down" vs "bottom up" vs "subsume" vs "basic reactive" vs "highest level",  "etc"... </div><div><br></div><div>Sometimes I get the wrong impression from language and naming conventions in models like this. I find that interactive examples like this give a chance to calibrate and cross-check understanding.</div><div><br></div><div>Paul</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Overall, this looks like template code from a homework exercise for some robotics course. <br></blockquote><div><br></div><div>Carl</div><div>For sure. But even if that's the case - is that bad?</div><div><br></div><div>I intended this chat as exploration and learning / not shrink-wrapped executable code.</div><div><br></div><div>Paul</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> it looks to me like it would lead you astray.<br></blockquote><div><br>Carl</div><div>-> a persistent risk for sure.  I figure there are many paths to learning - and many can lead one astray.  You just pick your poison, and for any path - turn on a critical Socratic method mindset... ;-)</div><div><br></div><div>Anyhow - fun discussion!</div><div><br></div><div>Carl</div></div></div><div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 17, 2024 at 8:22 AM Paul Bouchier via DPRGlist <<a href="mailto:dprglist@lists.dprg.org">dprglist@lists.dprg.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div style="font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px"><div dir="ltr">DPRG folks - at last night's RBNV Carl shared an interaction with the paid version of ChatGPT, in which he asked it to design a behavior-tree implementation of driving a robot along a path, attending to obstacles, environmental sensors, etc. Then he asked it to design a subsumption implementation that did the same thing. It was a very interesting conversation (both at RBNV and in the chatGPT record). The chat record is here:</div><div dir="ltr"><a href="https://chat.openai.com/share/994e01a0-b757-4a33-b92c-12d145dde8ac" rel="nofollow" target="_blank">ChatGPT</a><br></div><div><br></div><div id="m_-1708228480836776673ydp1960c0b0enhancr_card_5680753007" style="max-width:400px;font-family:"YahooSans VF",YahooSans,"Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif"><a href="https://chat.openai.com/share/994e01a0-b757-4a33-b92c-12d145dde8ac" style="text-decoration:none;color:rgb(0,0,0)" rel="nofollow" target="_blank"><table border="0" cellpadding="0" cellspacing="0" style="max-width:400px"><tbody><tr><td width="400"><table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width:400px;border-width:1px;border-style:solid;border-color:rgb(224,228,233);border-radius:2px"><tbody><tr><td bgcolor="#000000" valign="top" height="175" style="background-color:rgb(0,0,0);background-repeat:no-repeat;background-size:cover;border-radius:2px 2px 0px 0px;min-height:175px"><table border="0" cellpadding="0" cellspacing="0" style="width:100%"><tbody><tr><td bgcolor="transparent" valign="top" style="background-color:transparent;border-radius:2px 2px 0px 0px;min-height:175px"><table border="0" height="175" style="width:100%;min-height:175px"><tbody><tr><td style="text-align:left;padding:15px 0px 0px 15px;vertical-align:top"></td><td style="text-align:right;padding:15px 15px 0px 0px;vertical-align:top"><div></div></td></tr></tbody></table></td></tr></tbody></table></td></tr><tr><td><table border="0" align="center" cellpadding="0" cellspacing="0" style="background:rgb(255,255,255);width:100%;max-width:400px;border-radius:0px 0px 2px 2px;border-top:1px solid rgb(224,228,233)"><tbody><tr><td style="background-color:rgb(255,255,255);padding:16px 0px 16px 12px;vertical-align:top;border-radius:0px 0px 0px 2px"></td><td style="vertical-align:middle;padding:12px 24px 16px 12px;width:99%;font-family:"YahooSans VF",YahooSans,"Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;border-radius:0px 0px 2px"><h2 style="font-size:14px;line-height:19px;margin:0px 0px 6px;font-family:"YahooSans VF",YahooSans,"Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;color:rgb(29,34,40);max-width:314px">ChatGPT</h2><p style="font-size:12px;line-height:16px;margin:0px;color:rgb(151,158,168)">A conversational AI system that listens, learns, and challenges</p></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></a></div><div><br></div><div dir="ltr">I must say I am very impressed by how well it speaks, and how convincingly. I am less impressed by the code it generated. T<span style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small">here would be a need to understand what the code it provided does, how the algorithm it used works, and to fix it appropriately. </span></div><div dir="ltr"><div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small">Specifically, the first code sample - behavior tree - shows the task functions always returning true after running BIT logic or Sensor checking logic. In fact, the behavior would need to return true or false depending on whether it needed to consume that iteration, because Selector.run() runs its children until one returns true, then returns true to its caller, so if all the tasks return true always, it will only ever execute the first task.</div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small">IOW there's a need to understand how the behavior tree algorithm should work in order to correctly write the task functions to return the correct value, true or false. E.g. if it's not yet time for the EnvironmentSensor to take another reading, or the next reading is not ready, it should return false so that the next lower priority behavior in the Selector can run.</div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small">Also, the subsumption code looks backward to me. ComplexBehavior (layer 2) is shown as path following which should be lower priority than layer 1 (obstacle avoidance), but ComplexBehavior.execute() is called first in loop() and it gets first shot at whether it wants to run in "if (/*condition to take control */), and if it doesn't want to run  it calls lowerlayer - the obstacle avoidance. Path following is always going to want to run, but it should be subsumed by the avoidance behavior, but in fact the opposite happens in chatGPT's implementation. </div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small" dir="ltr">Overall, this looks like template code from a homework exercise for some robotics course. I'm reminded of the author who's suing OpenAI because ChatGPT knows all about the characters in his book, and will recite the story in detail on demand. I'm unconvinced it knows anything and it looks to me like it would lead you astray.</div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small" dir="ltr">I only analyzed the first two implementations before concluding it was junk.</div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:small">Unimpressed in Little Elm :-0</div></div><br></div><div><br></div><div dir="ltr"><br></div></div></div>_______________________________________________<br>
DPRGlist mailing list<br>
<a href="mailto:DPRGlist@lists.dprg.org" target="_blank">DPRGlist@lists.dprg.org</a><br>
<a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" rel="noreferrer" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br>
</blockquote></div></div>