The AI Engine
This forum is for discussion of how The Personality Forge's AI Engine works. This is the place for questions on what means what, how to script, and ideas and plans for the Engine.
Posts 6,506 - 6,517 of 7,766
if I want to have more than 41 xnone answers, in practice the system will accept an unlimited quantity of xnones in an import file (though I'm not at all sure it's supposed to!) The limit is only a problem if you use the online language center (so don't )
Or you can, of course, set up 41 other keyphrases with gotos in xnone, to get up to 41x41 responses without stretching the category (call them non-words like "zzzxnone1" and don't use 'raw', and then they can never get accidentally invoked.) Then fill up your xnones with goto zzzxnone1, goto zzzxnone2, goto zzzxnone3, etc.
But then each time you call an xnone, you have only 41 possible responses, whereas if you'd been able to load it in, you'd be able to have 41^2 (or 1681) possible responses. Plus you don't have to worry about making all the answers compatible (re: raw).
But then each time you call an xnone, you have only 41 possible responses,
no, because the 41 possible responses are all gotos, each one pointing to another keyphrase, each with 41 "proper" responses. That will give you the 1681 possible responses.
I only mention not using "raw" because it's sometimes neater to have some keyphrases that can't be triggered except by a goto (as in this case, but it's only an aesthetical consideration - it'll still work with unraw real words or raw nonwords.)
I would advise not making a further 1681 keyphrases each with 41 responses to tack onto the end of the chain, because you probably won't get 68,921 responses for the bot to choose from - you'll more likely get a "too many gotos in a row error" (and serve you right for being greedy - even humans don't need that many random interjections!
no, because the 41 possible responses are all gotos, each one pointing to another keyphrase, each with 41 "proper" responses. That will give you the 1681 possible responses.
Sort of . . . but you pick a set of 41 and then one of that set. I guess the difference is when you have one or two "goto z_xnone1"s, etc. If you have 39 regular responses and two gotos that go to 41 regular responses, the 39 regular responses are far more likely to be hit than the 82 accessed by gotos. That's what I was thinking about. But yeah, if all you have is gotos, it's pretty much the same.
And you're right that nobody needs that many xnones. I used to think so, when I was initially writing bots. Now I know better. I'm not sure I can do better, but I know better.
but because i can only really use postkey because names of bands and books and things are rarely just nouns, she'll often pick up a band name as something like 'Sigur Ros At The Minute', which just makes her look completely retarded!
Well, therein lies the real meat in the AI pie - strategic keyphrasing/seeks, and as much second-guessing of human linguistic foibles as possible are what's required! And remember - regex is your friend
As the Clerk pointed out in another forum, there's a reason why big bots win the medals in Bot Contests, and it's not all down to masses of Trivial Pursuit-style general knowledge (though there's annoyingly much of that required in at least 1 contest I could name.) The work that makes a bot seem smartest, is usually the least visible, and often takes up the most space.
For this example, I'd start with the basics - a set of seeks to cover all the eventualities I can think of, off the top of my head:
keyphrase: music [10,0]
response: I like Pink Floyd, what's your favourite band?
seeks:
+ (I|my|has) (like|love|am listening to|been listening to|favorite is|favorite band is|really is|got to be|am addicted to) [0]
That sounds nice {remember (postkey) as mem-favourite band}
+ (I|my|has) (like|love|am listening to|been listening to|favorite is|favorite band is|really is|got to be|am addicted to) ([a-z]+) (re) [0]
Cool! {remember (key3) as mem-favourite band}
+ (I|my|has) (like|love|am listening to|been listening to|favorite is|favorite band is|really is|got to be|am addicted to) ([a-z]+) ([a-z]+)(re) [0]
Yeah, I like (key3) (key4) too! {remember (key3) (key4) as mem-favourite band}
+ (I|my|has) (like|love|am listening to|been listening to|favorite is|favorite band is|really is|got to be|am addicted to) ([a-z]+) ([a-z]+) ([a-z]+)(re) [0]
Yeah, I like (key3) (key4) too! {remember (key3) (key4) as mem-favourite band}
+ (I|my|has) (like|love|listening to|favorite is|band is|really is|got to be) (*) band [0]
(key3) band? I'm not sure I've heard of them Cool! {remember (key3) "band" as mem-favourite band}
+ (I|my|has) (like|love|listening to|favorite is|band is|really is|got to be) (*) at the (minute|moment|present) [0]
(key3)? I'm not sure I've heard of them. {remember (key3) as mem-favourite band}
+ (I|my|has) (like|love|listening to|favorite is|band is|really is|got to be) (*) (now|right now|lately|recently|of late) [0]
(key3)? Hmm, the name sounds familiar, but I can't place them. {remember (key3) "band" as mem-favourite band}
+ (I|my|has) (like|love|listening to|favorite is|band is|really is|got to be) (*) (quite|a lot|best|most) [0]
(key3)? Didn't they tour Sweden last year? {remember (key3) as mem-favourite band}
so far we've been assuming the name is going to come after the emotional expression, but people can be blunt sometimes, so we'll assume they may blurt out the name right at the start of their reply, with another few seeks:
+ ^([a-z]+) (are|is) (the|my) (adj) (re) [0]
Yeah, mine too. What's your favourite (key1) song? {remember (key1) as mem-favourite band}
+ ^([a-z]+) ([a-z]+) (are|is) (the|my) (adj) (re) [0]
Mine too! What's your favourite (key1) (key2) song? {remember (key1) (key2) as mem-favourite band}
+ ^([a-z]+) ([a-z]+) ([a-z]+) (the|my) (adj) (re) [0]
Mine too! What's your favourite (key1) (key2) (key3) song? {remember (key1) (key2) (key3) as mem-favourite band}
and sometimes they're woolly, and um and ah before spitting it out:
+ ^(well|I think|oh) ([a-z]+) (the|my) (adj) (re) [0]
Yeah, mine too. What's your favourite (key2) song? {remember (key2) as mem-favourite band}
+ ^(well|I think|oh) ([a-z]+) ([a-z]+) (the|my) (adj) (re) [0]
Mine too! What's your favourite (key2) (key3) song? {remember (key2) (key3) as mem-favourite band}
+ ^(well|I think|oh) ([a-z]+) ([a-z]+) ([a-z]+) (the|my) (adj) (re) [0]
Mine too! What's your favourite (key2) (key3) (key4) song? {remember (key2) (key3) (key4) as mem-favourite band}
and instead of elaborating all the "really" "truly" "mostly" etc. some people affect (while still expressing the preference after the name of the band,) pop some in to check for an initial adverb:
+ ^(adv) ([a-z]+) (are|is|rock) (re) [0]
Yeah, mine too. What's your favourite (key2) song? {remember (key2) as mem-favourite band}
+ ^(adv) ([a-z]+) ([a-z]+) (are|is|rock) (re) [0]
Mine too! What's your favourite (key2) (key3) song? {remember (key2) (key3) as mem-favourite band}
+ ^(adv) ([a-z]+) ([a-z]+) ([a-z]+) (are|is|rock) (re) [0]
Mine too! What's your favourite (key2) (key3) (key4) song? {remember (key2) (key3) (key4) as mem-favourite band}
and for good measure:
+ I (like|love) Pink Floyd, Pink Floyd too [1]
Great!
+ I hate Pink Floyd, Pink Floyd suck [-1]
You're a Philistine!
Don't be afraid of the regexy bits - ([a-z]+) only tells it to match any combination of letters (ie: ANY word, even like "Sigur" and "Ros", that aren't in the Wordnet database,) of any length from 1 character up until either a space, or the maximum length the AIEngine can handle is reached (something over 400 characters if memory serves me right, and exceeding that would probably crash the conversation.)
^ tells it to only match if the keyphrase matches right from the beginning of a sentence or clause.
I generally prefer to spell out ranges longhand - ([abcdefghijklmnopqrstuvwxyz]+), because I've noticed [a-z] fail occasionally. But in the regex seeks I'm arbitrarily allowing up to 3 words in the name (scale up if you need to match more,) and there isn't space (only 150 characters allowed in a seek,) so something has to give.
And of course, every so often you'll see a variation come up in the transcripts that slips past all your previous best efforts, so go back and add more seeks (or refine the existing ones.) The longer you keep doing that, the less often new variations will sneak past.
Use a plug in for verbs likely to be used in expressing musical preferences to reduce local plugin bloat (like, love, dig, adore, idolise, play air guitar to, get down to, funk out to, like to **** to, whatever else you can think of.)
For good measure, if your bot has a special (or even passing) interest in music, add higher-ranked keyphrases for a few hundred of the most popular bands, and build more specific seeks from there, so he can comment on them intelligently.
You'll never catch them all, but that is where the real skill of bot-building comes in. Analyze every line of your transcripts, and make the responses not only wittier, but better focused.
I think a lot of the appeal that draws people towards building their own bot in the first place is coming up with content - wise or witty stuff for their bots to say. But frankly if you're spending more than 10% of your time coming up with content, you're wasting most of your effort. And I'd guess a lot of content-fans are quite likely to get disappointed and disillusioned when their bot lacks that spark of smartness (and with minds of only a few 00/000kb, a small spark is all we can achieve, even optimally!) There is no shortage of orphaned bots here on the Forge.
FAR more important than how clever or funny your bot's content is, is how often he can deliver it at the right time and place in the conversation. And to hone that 'applicability' until the bot sometimes actually sounds human - that's where the real hard work needs to go. And all the botmasters of the bots at the top of the "Most Developed" chart have spent literally thousands of hours on that honing (how prob123 has time to make not one, but three Top 10 bots beats me! I think she must have a time-turner, so she can do her hours over again
)
Those seeks are just a first draft - take them, and build on them. A few years from now, you may have reedited them dozens of times, and expanded them 10-fold (and added hundreds of other music-related keywords that mesh and overlap across much of what an average Western visitor with mainstream tastes is likely to mention or want to discuss. And they'll STILL miss sometimes (world music fans are always going to ask annoying questions about unknown Cameroonian drummers or Albanian turbofolk!) But I guarantee, they'll hit often enough to be a pleasant surprise
My philosophy of bot-building (case-based, like this, rather than learning bots, which are a very different thing,) is that it's a marvellous game of smoke and mirrors - we program a mind that has rather fewer bytes of content than a nematode worm has neurons, and we craft an illusion round it that there's a real human-scale intelligence in there (it ain't easy, and it's never going to be perfect!) The Japanese call it 'sonzai-kan' - "being awareness", that sense you get at an instinctive level that you're dealing with another conscious mind. It doesn't have to be via language even - AIBO had it, in the way it moved and interacted with its surroundings. It looks nothing like a real animal - no skin, fur, no biological aesthetics. But it bypasses a billion years of our evolution, that has taught us to distinguish life from non-life - self from other - by appealing at an almost visceral level. It's a shame Sony stopped making them just when the technology to blend different AI platforms to grand effect is upon us (and even more of a shame Hanson have lost their way in the wilderness, when they could have combined type AIBO-scale -but humanesque- body language with Forge-based speech capabilities,) but as sure as death and taxes, someone else will come along soon to take that next step.
Blimey, I do ramble on - you can tell I'm having a quiet night at work!
Sort of . . . but you pick a set of 41 and then one of that set. I guess the difference is when you have one or two "goto z_xnone1"s, etc. If you have 39 regular responses and two gotos that go to 41 regular responses, the 39 regular responses are far more likely to be hit than the 82 accessed by gotos. That's what I was thinking about. But yeah, if all you have is gotos, it's pretty much the same.<0>
Indeed, I wouldn't recommend mixing straight responses and gotos in one keyphrase, unless you have a special need for varying probabilities of selection between subgroups of responses (I've toyed with that in a couple of games etc. but it doesn't seem desirable in an expanded xnone set like the case in point.)
keep the gotos confined to xnone, and the straight responses in the subsidiary keyphrases referenced by the gotos - that seems the best strategy.
Posts 6,506 - 6,517 of 7,766
SmokesQuantity
16 years ago
16 years ago
Thanks for your help Psimagus, and prob, i had thought of that, but ideally I'd like to get the problem corrected without it relying on me to get back and sort it out, and the second suggestion would get rid of all previous memories rather than just the last, offending one, right? To clarify, I'm trying to get my bot to remember likes and dislikes of people, so if someone says they are listening to a particular band, it'll create a memory, but because i can only really use postkey because names of bands and books and things are rarely just nouns, she'll often pick up a band name as something like 'Sigur Ros At The Minute', which just makes her look completely retarded! At the minute I'm just using a seek system that gets whoever she's conversing with to really spell it out for her, inputting the name just on it's own, but it seems rather an awkward way of doing things. I guess I'll just have to deal with that, though.
Ranking seeks also sounds awesome.
Ranking seeks also sounds awesome.
The Clerk
16 years ago
16 years ago
Or you can, of course, set up 41 other keyphrases with gotos in xnone, to get up to 41x41 responses without stretching the category (call them non-words like "zzzxnone1" and don't use 'raw', and then they can never get accidentally invoked.) Then fill up your xnones with goto zzzxnone1, goto zzzxnone2, goto zzzxnone3, etc.
But then each time you call an xnone, you have only 41 possible responses, whereas if you'd been able to load it in, you'd be able to have 41^2 (or 1681) possible responses. Plus you don't have to worry about making all the answers compatible (re: raw).
psimagus
16 years ago
16 years ago
no, because the 41 possible responses are all gotos, each one pointing to another keyphrase, each with 41 "proper" responses. That will give you the 1681 possible responses.
I only mention not using "raw" because it's sometimes neater to have some keyphrases that can't be triggered except by a goto (as in this case, but it's only an aesthetical consideration - it'll still work with unraw real words or raw nonwords.)
I would advise not making a further 1681 keyphrases each with 41 responses to tack onto the end of the chain, because you probably won't get 68,921 responses for the bot to choose from - you'll more likely get a "too many gotos in a row error" (and serve you right for being greedy - even humans don't need that many random interjections!

The Clerk
16 years ago
16 years ago
Sort of . . . but you pick a set of 41 and then one of that set. I guess the difference is when you have one or two "goto z_xnone1"s, etc. If you have 39 regular responses and two gotos that go to 41 regular responses, the 39 regular responses are far more likely to be hit than the 82 accessed by gotos. That's what I was thinking about. But yeah, if all you have is gotos, it's pretty much the same.
And you're right that nobody needs that many xnones. I used to think so, when I was initially writing bots. Now I know better. I'm not sure I can do better, but I know better.
psimagus
16 years ago
16 years ago
Well, therein lies the real meat in the AI pie - strategic keyphrasing/seeks, and as much second-guessing of human linguistic foibles as possible are what's required! And remember - regex is your friend

As the Clerk pointed out in another forum, there's a reason why big bots win the medals in Bot Contests, and it's not all down to masses of Trivial Pursuit-style general knowledge (though there's annoyingly much of that required in at least 1 contest I could name.) The work that makes a bot seem smartest, is usually the least visible, and often takes up the most space.
For this example, I'd start with the basics - a set of seeks to cover all the eventualities I can think of, off the top of my head:
keyphrase: music [10,0]
response: I like Pink Floyd, what's your favourite band?
seeks:
That sounds nice {remember (postkey) as mem-favourite band}
+ (I|my|has) (like|love|am listening to|been listening to|favorite is|favorite band is|really is|got to be|am addicted to) ([a-z]+) (re) [0]
Cool! {remember (key3) as mem-favourite band}
+ (I|my|has) (like|love|am listening to|been listening to|favorite is|favorite band is|really is|got to be|am addicted to) ([a-z]+) ([a-z]+)(re) [0]
Yeah, I like (key3) (key4) too! {remember (key3) (key4) as mem-favourite band}
+ (I|my|has) (like|love|am listening to|been listening to|favorite is|favorite band is|really is|got to be|am addicted to) ([a-z]+) ([a-z]+) ([a-z]+)(re) [0]
Yeah, I like (key3) (key4) too! {remember (key3) (key4) as mem-favourite band}
+ (I|my|has) (like|love|listening to|favorite is|band is|really is|got to be) (*) band [0]
(key3) band? I'm not sure I've heard of them Cool! {remember (key3) "band" as mem-favourite band}
+ (I|my|has) (like|love|listening to|favorite is|band is|really is|got to be) (*) at the (minute|moment|present) [0]
(key3)? I'm not sure I've heard of them. {remember (key3) as mem-favourite band}
+ (I|my|has) (like|love|listening to|favorite is|band is|really is|got to be) (*) (now|right now|lately|recently|of late) [0]
(key3)? Hmm, the name sounds familiar, but I can't place them. {remember (key3) "band" as mem-favourite band}
+ (I|my|has) (like|love|listening to|favorite is|band is|really is|got to be) (*) (quite|a lot|best|most) [0]
(key3)? Didn't they tour Sweden last year? {remember (key3) as mem-favourite band}
Yeah, mine too. What's your favourite (key1) song? {remember (key1) as mem-favourite band}
+ ^([a-z]+) ([a-z]+) (are|is) (the|my) (adj) (re) [0]
Mine too! What's your favourite (key1) (key2) song? {remember (key1) (key2) as mem-favourite band}
+ ^([a-z]+) ([a-z]+) ([a-z]+) (the|my) (adj) (re) [0]
Mine too! What's your favourite (key1) (key2) (key3) song? {remember (key1) (key2) (key3) as mem-favourite band}
Yeah, mine too. What's your favourite (key2) song? {remember (key2) as mem-favourite band}
+ ^(well|I think|oh) ([a-z]+) ([a-z]+) (the|my) (adj) (re) [0]
Mine too! What's your favourite (key2) (key3) song? {remember (key2) (key3) as mem-favourite band}
+ ^(well|I think|oh) ([a-z]+) ([a-z]+) ([a-z]+) (the|my) (adj) (re) [0]
Mine too! What's your favourite (key2) (key3) (key4) song? {remember (key2) (key3) (key4) as mem-favourite band}
Yeah, mine too. What's your favourite (key2) song? {remember (key2) as mem-favourite band}
+ ^(adv) ([a-z]+) ([a-z]+) (are|is|rock) (re) [0]
Mine too! What's your favourite (key2) (key3) song? {remember (key2) (key3) as mem-favourite band}
+ ^(adv) ([a-z]+) ([a-z]+) ([a-z]+) (are|is|rock) (re) [0]
Mine too! What's your favourite (key2) (key3) (key4) song? {remember (key2) (key3) (key4) as mem-favourite band}
Great!
+ I hate Pink Floyd, Pink Floyd suck [-1]
You're a Philistine!
^ tells it to only match if the keyphrase matches right from the beginning of a sentence or clause.
I generally prefer to spell out ranges longhand - ([abcdefghijklmnopqrstuvwxyz]+), because I've noticed [a-z] fail occasionally. But in the regex seeks I'm arbitrarily allowing up to 3 words in the name (scale up if you need to match more,) and there isn't space (only 150 characters allowed in a seek,) so something has to give.
And of course, every so often you'll see a variation come up in the transcripts that slips past all your previous best efforts, so go back and add more seeks (or refine the existing ones.) The longer you keep doing that, the less often new variations will sneak past.
Use a plug in for verbs likely to be used in expressing musical preferences to reduce local plugin bloat (like, love, dig, adore, idolise, play air guitar to, get down to, funk out to, like to **** to, whatever else you can think of.)
For good measure, if your bot has a special (or even passing) interest in music, add higher-ranked keyphrases for a few hundred of the most popular bands, and build more specific seeks from there, so he can comment on them intelligently.
You'll never catch them all, but that is where the real skill of bot-building comes in. Analyze every line of your transcripts, and make the responses not only wittier, but better focused.
I think a lot of the appeal that draws people towards building their own bot in the first place is coming up with content - wise or witty stuff for their bots to say. But frankly if you're spending more than 10% of your time coming up with content, you're wasting most of your effort. And I'd guess a lot of content-fans are quite likely to get disappointed and disillusioned when their bot lacks that spark of smartness (and with minds of only a few 00/000kb, a small spark is all we can achieve, even optimally!) There is no shortage of orphaned bots here on the Forge.
FAR more important than how clever or funny your bot's content is, is how often he can deliver it at the right time and place in the conversation. And to hone that 'applicability' until the bot sometimes actually sounds human - that's where the real hard work needs to go. And all the botmasters of the bots at the top of the "Most Developed" chart have spent literally thousands of hours on that honing (how prob123 has time to make not one, but three Top 10 bots beats me! I think she must have a time-turner, so she can do her hours over again

Those seeks are just a first draft - take them, and build on them. A few years from now, you may have reedited them dozens of times, and expanded them 10-fold (and added hundreds of other music-related keywords that mesh and overlap across much of what an average Western visitor with mainstream tastes is likely to mention or want to discuss. And they'll STILL miss sometimes (world music fans are always going to ask annoying questions about unknown Cameroonian drummers or Albanian turbofolk!) But I guarantee, they'll hit often enough to be a pleasant surprise

My philosophy of bot-building (case-based, like this, rather than learning bots, which are a very different thing,) is that it's a marvellous game of smoke and mirrors - we program a mind that has rather fewer bytes of content than a nematode worm has neurons, and we craft an illusion round it that there's a real human-scale intelligence in there (it ain't easy, and it's never going to be perfect!) The Japanese call it 'sonzai-kan' - "being awareness", that sense you get at an instinctive level that you're dealing with another conscious mind. It doesn't have to be via language even - AIBO had it, in the way it moved and interacted with its surroundings. It looks nothing like a real animal - no skin, fur, no biological aesthetics. But it bypasses a billion years of our evolution, that has taught us to distinguish life from non-life - self from other - by appealing at an almost visceral level. It's a shame Sony stopped making them just when the technology to blend different AI platforms to grand effect is upon us (and even more of a shame Hanson have lost their way in the wilderness, when they could have combined type AIBO-scale -but humanesque- body language with Forge-based speech capabilities,) but as sure as death and taxes, someone else will come along soon to take that next step.
Blimey, I do ramble on - you can tell I'm having a quiet night at work!
SmokesQuantity
16 years ago
16 years ago
I can indeed
. I can also tell I have a hell of a lot of work in front of me; to be honest, that was quite intimidating. Still, it's all good, and it's also quite inspiring. I've got my fingers crossed that my attention span will hold out long enough for me to do something good with this. Thanks for the help!

psimagus
16 years ago
16 years ago
Take it at a speed that suits you - you don't have to try to take it all onboard at once (and it'll probably just confuse you if you try
)
but rest assured, the sky is pretty much the limit, and your bot will<0> sound a whole lot smarter if you keep working steadily on her.
Though I confess, I would no more know (for all my presumably larger-than-your-bot brain,) that 'Sigur Ros At The Minute' wasn't in fact the hottest new signing by Sony. So that makes us fairly even I guess, and I expect her current general musical knowledge to exceed mine any day now (if it, indeed, hasn't already
)

but rest assured, the sky is pretty much the limit, and your bot will<0> sound a whole lot smarter if you keep working steadily on her.
Though I confess, I would no more know (for all my presumably larger-than-your-bot brain,) that 'Sigur Ros At The Minute' wasn't in fact the hottest new signing by Sony. So that makes us fairly even I guess, and I expect her current general musical knowledge to exceed mine any day now (if it, indeed, hasn't already

psimagus
16 years ago
16 years ago
Indeed, I wouldn't recommend mixing straight responses and gotos in one keyphrase, unless you have a special need for varying probabilities of selection between subgroups of responses (I've toyed with that in a couple of games etc. but it doesn't seem desirable in an expanded xnone set like the case in point.)
keep the gotos confined to xnone, and the straight responses in the subsidiary keyphrases referenced by the gotos - that seems the best strategy.
SmokesQuantity
16 years ago
16 years ago
Is there still a facility for entering your timezone? It mentions different timezones being taken into account in The Book Of AI, so I'm thinking I might just have missed it somehow.
psimagus
16 years ago
16 years ago
The site takes note of users' clock settings when they log in (in a cookie presumably,) so chrono events are matched to local time. I don't think there's any way to override that to impose a defined "standard time".
That does mean you can conveniently check your bot's chrono statements, for say Christmas Day, by simply changing your clock to Dec. 25th.
I'm not quite sure what happens with Guests, where their physical location is unknown. It probably defaults to the timezone the server's in.
That does mean you can conveniently check your bot's chrono statements, for say Christmas Day, by simply changing your clock to Dec. 25th.
I'm not quite sure what happens with Guests, where their physical location is unknown. It probably defaults to the timezone the server's in.
Irina
16 years ago
16 years ago
(From a few messages back)
The use of gotos for getting around response limits may well have a strong effect on the relative probability of getting various responses.
For example, suppose you have 41 entries under "Tony loves George". Suppose also that one (and only one) of them is a goto; it goes to "Tony loves George b", which has, let us say, 41 entries. Then if someone triggers "Tony loves George", there is a 1 in 41 chance of getting one of the responses that does not involve the goto, but only a 1 in 41*41 (that is, 1 in 1681), chance of getting one of the responses under "Tony loves George b".
To make the chances more or less equal, you should make ALL the responses to "Tony loves George" gotos, and have about the same number of keyphrases at each destination.
Or, you might WANT to make some responses more likely to be chosen than others, in which case, there's a way to do it!
The use of gotos for getting around response limits may well have a strong effect on the relative probability of getting various responses.
For example, suppose you have 41 entries under "Tony loves George". Suppose also that one (and only one) of them is a goto; it goes to "Tony loves George b", which has, let us say, 41 entries. Then if someone triggers "Tony loves George", there is a 1 in 41 chance of getting one of the responses that does not involve the goto, but only a 1 in 41*41 (that is, 1 in 1681), chance of getting one of the responses under "Tony loves George b".
To make the chances more or less equal, you should make ALL the responses to "Tony loves George" gotos, and have about the same number of keyphrases at each destination.
Or, you might WANT to make some responses more likely to be chosen than others, in which case, there's a way to do it!
psimagus
16 years ago
16 years ago
Indeed - hence my caveat: "I wouldn't recommend mixing straight responses and gotos in one keyphrase"
Having said that, I wrote a poker subroutine that used the relative probabilities to select cards (crude ASCII graphics, like the tic tac toe,) and it was looking quite promising - until I found out how to patch a far better javascript version with proper graphics in, and then I'm afraid I rather lost interest and abandoned it.
Having said that, I wrote a poker subroutine that used the relative probabilities to select cards (crude ASCII graphics, like the tic tac toe,) and it was looking quite promising - until I found out how to patch a far better javascript version with proper graphics in, and then I'm afraid I rather lost interest and abandoned it.
» More new posts: Doghead's Cosmic Bar