Hello, I have made my "DetailedSimulator" available: http://www.skybuck.org/Corewars/ All files and folders need to be downloaded to make it work. To see it in action run it as follows: 1. SimulatorSettingsFileHandling.pl (can be skipped) 2. DetailedSimulator.exe 3. SimulatorResultsFileHandling.pl (can be skipped) Evolver should use that order to interact with the DetailedSimulator.exe. So an evolver would do: 1. Evolve warriors 2. Write settings to Settings.bin 3. Run DetailedSimulator.exe 4. Read results from Results.bin 5. Select best/wanted warriors Goto 1. The settings.bin functions as "command line parameters" via diskfile. (This is a good thing to get used to... since command line parameters have buffer limitations.) The results.bin functions as "output back to the evolvers" via diskfile. I make this available for Paul Kline, maybe he can use it for his evolvers, other people welcome too. Since Paul uses Perl I spent today writing two scripts to help work with the DetailedSimulator.exe. (I used ActivePerl to test the scripts, what do you use Paul ? :)) The first perl script is: SimulatorSettingsFileHandling.pl This perl script writes the simulator settings and warrior names and warrior filenames to Settings.bin. The DetailedSimulator.exe loads the Settings.bin and then knows the warrior names and where the warriors are... thanks to the filenames. The DetailedSimulator.exe then loads the warriors. (Currently only "load" files support (which means no support for labels), "org start" is not supported). The DetailedSimulator.exe then battles the warriors and writes results to Results.bin. Results.bin contains "SimpleResults" and "DetailedResults". The second perl script is: SimulatorResultsFileHandling.pl This perl script reads the results and prints it to the screen (as an example). (DetailedScore should be ignored for now (it uses an experimental custom formula which is hardcoded in detailedsimulator.exe, to make your own detailed score use the fields in the results file described below, I will give an example which is identifcal to the experimental formula I used...) in the future this detailed score could be calculated by the simulator with "custom points" this future is not implemented and is not really needed since you can do that yourself by using the field below.) So in short: Communication is done via files/disk and in binary for ease of programming. (I don't want to mess with settings in text and command line parameters are too limited for the future). So you should learn from these scripts how to do "binary files" if you want to take adventage of my future software release... ;) :) Legend: 1 byte = byte 4 bytes = integer The binary format for Settings.bin is: mPSpaceEnabled 1 byte mCoreSize 4 bytes mPSpaceSize 4 bytes mMaxWarriorSize 4 bytes mMaxWarriorCount 4 bytes mMaxProcesses 4 bytes mMaxCycles 4 bytes mMaxRounds 4 bytes mMinDistance 4 bytes mBattleType 1 byte mScoringType 1 byte mWarriorCount 4 bytes mWarriorNameSize 4 bytes mWarriorNameCharacters mWarriorNameSize bytes mWarriorFilenameSize 4 bytes mWarriorFilenameCharacters mWarriorFilenameSize bytes mWarriorNameSize 4 bytes mWarriorNameCharacters mWarriorNameSize bytes mWarriorFilenameSize 4 bytes mWarriorFilenameCharacters mWarriorFilenameSize bytes mWarriorNameSize 4 bytes mWarriorNameCharacters mWarriorNameSize bytes mWarriorFilenameSize 4 bytes mWarriorFilenameCharacters mWarriorFilenameSize bytes and so forth... up to mWarriorCount warrior info's should be present... "WarriorInfo" is: WarriorNameSize + WarriorNameCharacters + WarriorFilenameSize + WarriorFilenameCharacters (Characters should be in ASCII/ANSI/8 BITS) The binary format for Results.bin is mWarriorCount 4 bytes mWarriorScore 4 bytes mWarriorDetailedScore 4 bytes mWarriorScore 4 bytes mWarriorDetailedScore 4 bytes mWarriorScore 4 bytes mWarriorDetailedScore 4 bytes and so forth up to mWarriorCount followed by: mWarriorCount 4 bytes mUniqueCorePositionsOwned 4 bytes mUniqueCorePositionsExecuted 4 bytes mUniqueCorePositionsBombed 4 bytes mUniqueCorePositionsStunned 4 bytes mUniqueCorePositionsJumpInjected 4 bytes mUniqueCorePositionsCopiedTo 4 bytes mUniqueCorePositionsSpawned 4 bytes mUniqueCorePositionsInternalDecisions 4 bytes mUniqueCorePositionsExternalDecisions 4 bytes mFriendlyProcessesSpawned 4 bytes mEnemyProcessesSpawned 4 bytes mEnemyProcessesKilled 4 bytes mEnemyPositionsBombed 4 bytes mEnemyPositionsStunned 4 bytes mEnemyPositionsJumpInjected 4 bytes mEnemyPositionsInjected 4 bytes mEnemyPositionsDecisions 4 bytes mUniqueCorePositionsOwned 4 bytes mUniqueCorePositionsExecuted 4 bytes mUniqueCorePositionsBombed 4 bytes mUniqueCorePositionsStunned 4 bytes mUniqueCorePositionsJumpInjected 4 bytes mUniqueCorePositionsCopiedTo 4 bytes mUniqueCorePositionsSpawned 4 bytes mUniqueCorePositionsInternalDecisions 4 bytes mUniqueCorePositionsExternalDecisions 4 bytes mFriendlyProcessesSpawned 4 bytes mEnemyProcessesSpawned 4 bytes mEnemyProcessesKilled 4 bytes mEnemyPositionsBombed 4 bytes mEnemyPositionsStunned 4 bytes mEnemyPositionsJumpInjected 4 bytes mEnemyPositionsInjected 4 bytes mEnemyPositionsDecisions 4 bytes mUniqueCorePositionsOwned 4 bytes mUniqueCorePositionsExecuted 4 bytes mUniqueCorePositionsBombed 4 bytes mUniqueCorePositionsStunned 4 bytes mUniqueCorePositionsJumpInjected 4 bytes mUniqueCorePositionsCopiedTo 4 bytes mUniqueCorePositionsSpawned 4 bytes mUniqueCorePositionsInternalDecisions 4 bytes mUniqueCorePositionsExternalDecisions 4 bytes mFriendlyProcessesSpawned 4 bytes mEnemyProcessesSpawned 4 bytes mEnemyProcessesKilled 4 bytes mEnemyPositionsBombed 4 bytes mEnemyPositionsStunned 4 bytes mEnemyPositionsJumpInjected 4 bytes mEnemyPositionsInjected 4 bytes mEnemyPositionsDecisions 4 bytes and so forth... up to mWarriorCount See the perl scripts for examples of this. (I am not that good at perl so I tried to keep it simple) For actual use you will probably have to modify it etc... if you need help with that let me know... maybe I can help you... otherwise you on your own.. (perl is a pretty shitty language and very badly documented but I managed anyway ;) :)) Example of detailed score: // this is the formula that was used... now you can simply create your own... // by using those fields and multiplieing them with the points that you want to reward to them... procedure TSimulatorWarriorStatistics.CalculateDetailedScore; begin mDetailedScore := 7 * mUniqueCorePositionsOwned + 10 * mUniqueCorePositionsExecuted + 50 * mUniqueCorePositionsBombed + 9 * mUniqueCorePositionsStunned + 3 * mUniqueCorePositionsJumpInjected + 20 * mUniqueCorePositionsCopiedTo + 1 * mUniqueCorePositionsSpawned + 6 * mUniqueCorePositionsInternalDecisions + 5 * mUniqueCorePositionsExternalDecisions + 0 * mFriendlyProcessesSpawned + 1 * mEnemyProcessesSpawned + 100 * mEnemyProcessesKilled + 20 * mEnemyPositionsBombed + 9 * mEnemyPositionsStunned + 3 * mEnemyPositionsJumpInjected + 2 * mEnemyPositionsInjected + 4 * mEnemyPositionsDecisions; end; I hope you have fun with it... I hope you at least give it a try... otherwise I just wasted a day for nothing ! ;) =D (Though it is kinda nice to finally get something out of the door and have a "binary file format" to do stuff with it... maybe I use it myself in the future to do some experimental evolver tricks with these points and such... For example each warrior could have it's own point system which could be evolved as well which could be interesting... ) My evolver actually did it as follows: First it examines the "Score" which is the normal score as CoreWin/PMars etc... Warriors with higher "Score" are kept. Warriors with equal "Score" are then examined by looking at "DetailedScore". The warrior with "equal score" and higher "detailed score" is then kept. (Paul wants to do some experiments with warriors that copy themselfes or whatever... and this detailed point system might just be what he needs to evolve the warriors faster into the correct direction... since for example mUniqueCorePositionsSpawned indicates a warrior spawned a lot... so if you want that give it a higher score like so: 200 * mUniqueCorePositionsSpawned) (200 might be a bit high... but at least you get my drift ?! ;) :)) (Let me know if you have download problems, execute problems, perl problems, or any other problems with it !? then I fix it for you... but everything should work since it was tested by me ;) :)) (However the website is new/still experimental... not sure if access settings are correct but so far it seems to be working at least for me ! ;) :)) Bye, Skybuck.