Competition Followup

Posted by ludamad on Oct. 5, 2008, 1:31 p.m.

This isn't about the new halloween competition, but rather about the one I described here:

http://64digits.com/users/index.php?userid=ludamad&cmd=comments&id=264190

The Deadline: While there is a lot of things that can be done to improve the AI, it is really about simple concepts well applied. The deadline is in a week, next sunday.

The Rankings:

Here are the categories I will be judging the AI scripts given:

-Best AI in a group setting: The AI that performs the best on average when all the AIs play off against each other at once. This will test the ability to maximize your own score against enemy AIs.

-Best Worst-case: Every round, the weakest AI is removed from the game-pool. The last two remaining win. This will test your ability to not fail-hard.

-Most Creative: Your AI, regardless of performance, was a neat or funny idea.

And here are the categories that aren't exactly 'won', but will be mentioned:

-Most aggressive: The AI that lowers the opponents' scores as much as possible.

-Most friendly: The AI that lowers the opponents' scores the least.

-Biggest Failure: Yeah.

The standings of the AIs will be posted in each category.

From this point you can PM me your GML scripts, with a name for the AI, or you can post them here if you really don't mind people seeing them.

The Idea behind the Competition:

I feel the game suffers from the very thing I intended to be attractive - the look of simplicity. The game isn't. You are preparing an AI to do well against AIs of varying aggressiveness, varying randomness.

The basic idea keeps much from the iterated prisoner dilemma, but differs in that if you knew what the other AI would do, you could dominate it. In the iterated prisoner dilemma the best you could do against an AI that always defects is defect.

Here are basic design ideas, and what I think of them:

-One move play: Always play the same move.

This AI type is very weak. The best one in this type is always banking, but it still is very predictable. AIs this simple need randomness to survive.

-Tit for Tat, or Counter Their Last: Always plays the move that would do well against what the opponent played last.

This AI type is considerably stronger. It beats the One move play AI types, all 3 possible ones. With a bit of randomness, it could do well. Currently AI scripts exist that will pinpoint and demolish Tit for Tat. A sub-idea in this is to bank when they banked too. This may do better overall, unless the other AI becomes aggressive against heavy-handed banking. It would backfire in that case as you would entice the AI to steal more.

-Random Move: Plays a move randomly decided.

This AI type is understandably hard to crack. However, its performance in a large game is a bit bad. If it keeps the idea of equal percentage each move, it will not bank enough to have a high score. If it tends to do one move over another, an analyst AI will counter it. Neither will it exploit simple AIs, denying easy points. This AI however is very hard to beat one on one, as the game one on one is like rock paper scissors. (One on one performance willl only get you so far, it is more important to maximize your score than to get a better score in one on one).

-Strategic Tit for Tat, or Counter Their Likely (Determiner in the preset AI examples): Plays the move that it feels will do well against what the other AI will play next.

The analysis used to figure this out can range from the simple (in the preset, just a count), to the complex, and this seems to be the most common strategy used so far. A sound idea is to assume their recent moves are more likely to be repeated than their old moves.

-Strategy Switcher, or Hybrid: Plays a strategy until it is doing badly, then switches. Optionally, it continues switching for the whole game.

There are many ways to tell if your AI is doing badly. The most sound may be to keep track of your score since you changed strategy, and every 5 moves evaluate if you should change. This AI has the advantage of not being relatively fail-safe.

I hope that enstills some ideas of what is possible. I'll be posting some advanced AI scripts for an idea of what performs well.

Comments

SteveKB 16 years, 2 months ago

hmmmm ;p not sure

yeah I'm not going to participate in this one but maybe someone else will help.

PY 16 years, 2 months ago

do I win :3

ludamad 16 years, 2 months ago

I like PY's entry, hehe.

Graydon 16 years, 2 months ago

I'm going for the Fail category.

s 16 years, 2 months ago

Markov does all right in that it finds the weaknesses of the foe while hiding behind a veil of randomness

Pavlov's mode changing is too simple to not become exploited to some degree, causing it to usually lose to even simple Determiners

Trendy does well for being Determiner in method but seeming random

ludamad 16 years, 2 months ago

Here is trendy by serprex:

if Move=-1{w[0]=200;w[1]=200;w[2]=200;return choose(0,1,2)}

w[MyMoves[Move]]+=simulate(MyMoves[Move],TheirMoves[Move])-simulate(TheirMoves[Move],MyMoves[Move])

if Move<20{return choose(0,1,2)}

var v;v=random(w[0]+w[1]+w[2])

if v<=w[0] return 0

if v<=w[0]+w[2] return 2

return 1

Its essentially random but tends towards certain moves based on their performance. Does a lot better than normal random.

Example of the AI I'm working on (red) figuring an opponent out midway into the game:

Green in the background is Defend, red is Steal, blue is Bank.