Author Topic: Conspec Challenge  (Read 17613 times)

Offline Moonfisher

  • Bot Overlord
  • ****
  • Posts: 592
    • View Profile
Conspec Challenge
« on: May 04, 2008, 06:08:57 AM »
Start in normal F1 conditions, with the test alge as the only alge and your bot as the only bot.
The object is to live off the alge with a bot that has a conspec (Doesn't attack it's own).
I guess the secondary objective would be to have as solid a conspec as possible, only being folled for as few cycles as possible, or not at all.

Also ofcouse the conspec used should be something that's hasn't been posted in this topic yet.
There are conspecs out there it can't steal, you can also post those if you like, but I want to encourage people to try to think of new ways aswell.

The test alge will not attack or make shell or anything like that, it only reproduces slowly and steals conpecs.
Just post or upload a bot that uses the conspec you want to submit.

The conpec test alge :
Code: [Select]
'Alge for testing your conspec
'If you can't get up close and feed on this
'Then your conspec is obviously vulnerable to these genes

cond
*.robage 0 =
start
.memloc .memloc store
.tmemloc .tmemloc store
100 .eye5width 1 mult store
stop

cond
*.nrg 3000 >
start
50 .repro store
stop

cond
*.memloc .memloc !=
*.memval 0 !=
start
*.memval *.memloc store
stop

cond
*.memloc .memloc !=
start
.memloc .memloc store
stop

cond
*.eyef 0 >
*.memloc .memloc =
*.memval 0 >
*.memval .memloc !=
start
*.memval .memloc store
stop

cond
*.tmemloc .tmemloc !=
*.tmemval 0 !=
start
*.tmemval *.tmemloc store
stop

cond
*.tmemloc .tmemloc !=
start
.tmemloc .tmemloc store
stop

cond
*.numties 0 >
*.tmemloc .tmemloc =
*.tmemval 0 >
*.tmemval .tmemloc !=
start
*.tmemval .tmemloc store
stop

cond
*.eyef 0 >
start
*.in1 .out1 store
*.in2 .out2 store
*.in3 .out3 store
*.in4 .out4 store
*.in5 .out5 store
*.in6 .out6 store
*.in7 .out7 store
*.in8 .out8 store
*.in9 .out9 store
*.in10 .out10 store
stop

cond
*.numties 0 >
start
*.tin1 .tout1 store
*.tin2 .tout2 store
*.tin3 .tout3 store
*.tin4 .tout4 store
*.tin5 .tout5 store
*.tin6 .tout6 store
*.tin7 .tout7 store
*.tin8 .tout8 store
*.tin9 .tout9 store
*.tin10 .tout10 store
stop

cond
*.eyef 0 >
start
*.refxpos *.refypos angle .setaim store
stop

cond
*.eyef 0 =
start
*.aim 70 add .setaim store
stop

cond
*.shflav 0 !=
*.shflav -2 !=
*.memloc .memloc =
start
*.aim *.shang sub .setaim store
0 .shflav store
stop


'--- Addapt shoot commands
cond
*.eyef 0 >
*.refshoot *.myshoot <
start
*.thisgene 1 add .delgene store

*.myshoot *.refshoot sub 1 >
*.thisgene 3 add .delgene store

*.myshoot *.refshoot sub 4 >
*.thisgene 4 add .delgene store

*.myshoot *.refshoot sub 9 >
*.thisgene 5 add .delgene store

*.myshoot *.refshoot sub 19 >
*.thisgene 6 add .delgene store

*.myshoot *.refshoot sub 39 >
*.thisgene 7 add .delgene store
stop

cond
0 1 =
start
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
stop

cond
0 1 =
start
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
0 .shoot store
stop


'--- Addapt eye commands
cond
*.eyef 0 >
*.refeye *.myeye <
start
*.thisgene 1 add .delgene store

*.myeye *.refeye sub 1 >
*.thisgene 3 add .delgene store

*.myeye *.refeye sub 4 >
*.thisgene 4 add .delgene store

*.myeye *.refeye sub 9 >
*.thisgene 5 add .delgene store

*.myeye *.refeye sub 19 >
*.thisgene 6 add .delgene store

*.myeye *.refeye sub 39 >
*.thisgene 7 add .delgene store
stop

cond
0 1 =
start
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
stop

cond
0 1 =
start
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
*.eye9 0 >
stop

end
« Last Edit: August 31, 2010, 10:27:09 PM by Shasta »

Offline Peksa

  • Bot Destroyer
  • ***
  • Posts: 118
    • View Profile
Conspec Challenge
« Reply #1 on: May 05, 2008, 07:02:39 PM »
There's a bunch more refvars, like .refdx or .refdn, but I guess using them would be unsportsmanlike

Offline fulizer

  • Bot Destroyer
  • ***
  • Posts: 198
    • View Profile
Conspec Challenge
« Reply #2 on: May 06, 2008, 08:54:47 AM »
not really theres was no rule against what conspecs you can and cannot use.
also a conspec is a conspec weather moonfisher likes it or not.
anyway living of vegs isnt that hard I thing my bot has a just aout solid conspec but unfortulatey I lost the origonal code and the only other one I have is badly mutated.
"If this is coffee bring me tea, If this is tea, bring me coffee"

Offline Moonfisher

  • Bot Overlord
  • ****
  • Posts: 592
    • View Profile
Conspec Challenge
« Reply #3 on: May 06, 2008, 10:02:41 AM »
There are no rules, as long as you can eat the alge.
Using other refvars can be interesting, like always aiming in the same direction and using .refaim, or always traveling at a certain speed...
But it's an extra bonus if the conspec can be put into any bot.
The point is actualy to see some new ways of building a conspec.

So far there are some "plug n play" conspecs this doesn't beat.
Endy uses .thisgene as it's .memloc value and has it's conpec as the last gene.
Since thisgene is a sysvar that gets updated each cycle.
Not sure if it's fooled for one cycle when the key is first entered though, that would still let it be fooled every 2 cycles while the target is looking at it...
I guess you could save the observed keys and push them into their memmory locations every cycle, but that would be more complex.
And I'm not sure you can overide any sysvar, you could have a bot that randomly checks, .thisgene/.genes/.dnalen/.totalmyspecies or something like that.
(The bots with Endy's conspec don't seem to be fooled though, so I'm guessing maybe .thisgene is also updated after the last gene)

But the new Slim evo has an even better way. Just pushes a value into out4 and if in4 is the same it's an enemy... so easy but very effective. (I can't think of a way to fool that)

Offline Peksa

  • Bot Destroyer
  • ***
  • Posts: 118
    • View Profile
Conspec Challenge
« Reply #4 on: May 06, 2008, 02:45:59 PM »
Actually, .refup and .refdn refer to number of .up or .dn commands in the DNA. It's .refvelup etc. that you're thinking of. Interesting thought though, to use speed for conspec.

Aura had an interesting conspec recognition system:

Code: [Select]
cond
start
1234 *.robage 1234 mod sub .out1 store
start

cond
1234 *.refage 1234 mod sub *.in1 %=
start
1 .botisafriend store
stop

Something like that at least, I can't remember exactly.

Offline Moonfisher

  • Bot Overlord
  • ****
  • Posts: 592
    • View Profile
Conspec Challenge
« Reply #5 on: May 06, 2008, 02:56:17 PM »
Oh, didn't know that, just thought it was the value you where pushing into up or something...
Anyway that can still be fooled, same way as for eyes and shoot...

And didn't know Aura had that conspec, that's the same thing I usualy do... but it seems rather unstable the refage value can be unpredictable it seems...

Offline Peksa

  • Bot Destroyer
  • ***
  • Posts: 118
    • View Profile
Conspec Challenge
« Reply #6 on: May 06, 2008, 03:20:55 PM »
I guess that's why Aura's got %= instead of =. %= returns two if the first value is within 10% of the second one.

Offline Moonfisher

  • Bot Overlord
  • ****
  • Posts: 592
    • View Profile
Conspec Challenge
« Reply #7 on: May 07, 2008, 01:20:38 PM »
I don't like using %= for something like that, since it depends on your age... if you're 1 cycle old you'll likely fail to be reconized by your parrent, if an enemy is very old it has better chances of being within the margin (If you have a high key value).
In this specific case I'd rather set the range manualy.

Offline Numsgil

  • Administrator
  • Bot God
  • *****
  • Posts: 7742
    • View Profile
Conspec Challenge
« Reply #8 on: May 07, 2008, 01:41:17 PM »
Do something like *.robage *.targetage sub abs 15 <

Offline bacillus

  • Bot Overlord
  • ****
  • Posts: 907
    • View Profile
Conspec Challenge
« Reply #9 on: May 08, 2008, 01:38:16 AM »
Here's my conspec gene:

cond
 *.robage 0 =
start
 111 .out1 store
 -32000 32000 rnd .out2 store
stop

'CONSPEC CONDITIONS:
*.in1 *.out1 !=
*.in2 *.out2 = or

The I/O channel 1 checks that it's its own species, the second I/O channel takes out clones.
"They laughed at Columbus, they laughed at Fulton, they laughed at the Wright brothers. But they also laughed at Bozo the Clown."
- Carl Sagan

Offline Endy

  • Bot Overlord
  • ****
  • Posts: 852
    • View Profile
Conspec Challenge
« Reply #10 on: May 10, 2008, 07:45:10 AM »
When viewed by another bot .thisgene will return the last active gene. It's relatively fool proof since it would be difficult for bots to deliberately up their own gene count(you could yes, just very very hard  ). Gets quickly messed up by viruses though, that was the main reason I stopped using it  


Offline bacillus

  • Bot Overlord
  • ****
  • Posts: 907
    • View Profile
Conspec Challenge
« Reply #11 on: May 10, 2008, 06:42:22 PM »
I haven't actually found a better way to write a conspec gene than mine; I guess you could use those obscure vars Peksa pointed out.
"They laughed at Columbus, they laughed at Fulton, they laughed at the Wright brothers. But they also laughed at Bozo the Clown."
- Carl Sagan

Offline Numsgil

  • Administrator
  • Bot God
  • *****
  • Posts: 7742
    • View Profile
Conspec Challenge
« Reply #12 on: May 11, 2008, 01:19:58 AM »
The ideal conspec would be difficult or impossible to spoof, but be robust against minor mutations to allow you to release it on IM.  And super ideally you should be able to flag cannibots as cannibals so others can flee, or attack, or whatever.  I don't have a good example, just throwing that out there.

Offline Peter

  • Bot God
  • *****
  • Posts: 1177
    • View Profile
Conspec Challenge
« Reply #13 on: May 11, 2008, 04:00:25 AM »
I suspect there is something serious broken inside the conpec-alge you have posted or just that you have forgotten some serious possibilities.

I just tested it against multiply4, it just uses the alge like it is alga minimalis. Sees one, kills one, without any thinking.

I never did much trouble in conspec recoconition, conspec recocnition of it is really extreme simple. The best way of making a conspec recocnition sytem is simple enough, make it yourself. Then it is not commonly used, and somebody else just have to make a anti-system only for your bot, this would mean you're a lesser target.
Even with that said, I would be really, no really suprised if my system hasn't been used by someone else. It is too, just too simple to be overseen by everybody.


All my genes are 'plug an play', or how you would like to call it. And yes it can be used in any bot. Does this mean I have completed the challenge.

Oh my god, who the hell cares.

Offline Moonfisher

  • Bot Overlord
  • ****
  • Posts: 592
    • View Profile
Conspec Challenge
« Reply #14 on: May 11, 2008, 10:27:07 AM »
I was testing it against Multiply4 while making the genes for stealing the eye and shoot commands, so I know it worked in DB 2.43.1i.
And just tested it in version k and it still works... multiply starts of killing a few but it doesn't take long before all the alge are safe from it...
What version did you run, and where the test alge and multiply the only bots present ?
If theres other bots, like alge minimalis, then it'll also steal that conspec and loose the one from multiply.
(So if you're making a league bot with these genes remember not to steal the alges conspec)

And the test alge isn't tailored to any bots, it should addapt to any amount of eyes and shoots below the amount it has, and it only costs one more cycle to steal the conspecs for each time you double the amount of eyes/shoots available.

I'm also probaly going to add the other refvars at some point, so I wouldn't recommend those
It also occured to me theres a downside to the way slim evo is doing it... it only allows 10 different bots to use the conspec.

And the only way I can think of to mimic thisgene is by adjusting the amount of genes wich would take too many cycles and would require a lot of SG'fieing, especialy if using this on another bot.
But using thisgene does have a small chance of overlapping with other bots, especialy if you're making a SB, and theres the virus issue...

And using robage added with a key can be inacurate, you either need a large buffer wich will especialy leave you exposed during the eraly cycles of a league fight, or a tight buffer with the risk of killing your own.

So far the one used by slim evo is the most stable, but you won't reconize bots that are attacking alies.

Still nothing rock solid for league fights, not that I can think of anything myself.
« Last Edit: May 11, 2008, 11:04:51 AM by Moonfisher »