Long if blocks make my brain hurt
This commit is contained in:
parent
d0d7b71054
commit
9c0c1014c0
2 changed files with 86 additions and 79 deletions
18
game.lua
18
game.lua
|
@ -369,23 +369,25 @@ function _M.getInputs()
|
||||||
return inputs, inputDeltaDistance
|
return inputs, inputDeltaDistance
|
||||||
end
|
end
|
||||||
|
|
||||||
_M.areaLoadedQueue = {}
|
|
||||||
function _M.onceAreaLoaded(handler)
|
|
||||||
table.insert(_M.areaLoadedQueue, handler)
|
|
||||||
end
|
|
||||||
|
|
||||||
function _M.clearJoypad()
|
function _M.clearJoypad()
|
||||||
for b = 1,#config.ButtonNames do
|
for b = 1,#config.ButtonNames do
|
||||||
input.set(0, b - 1, 0)
|
input.set(0, b - 1, 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local areaLoadedQueue = {}
|
||||||
|
function _M.onceAreaLoaded(handler)
|
||||||
|
table.insert(areaLoadedQueue, handler)
|
||||||
|
end
|
||||||
|
|
||||||
function processAreaLoad()
|
function processAreaLoad()
|
||||||
for i=#_M.areaLoadedQueue,1,-1 do
|
for i=#areaLoadedQueue,1,-1 do
|
||||||
table.remove(_M.areaLoadedQueue, i)()
|
table.remove(areaLoadedQueue, i)()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
memory2.BUS:registerwrite(0xb517b2, processAreaLoad)
|
function _M.registerHandlers()
|
||||||
|
memory2.BUS:registerwrite(0xb517b2, processAreaLoad)
|
||||||
|
end
|
||||||
|
|
||||||
return _M
|
return _M
|
||||||
|
|
147
neat-donk.lua
147
neat-donk.lua
|
@ -9,6 +9,8 @@ local game = dofile(base.."/game.lua")
|
||||||
local mathFunctions = dofile(base.."/mathFunctions.lua")
|
local mathFunctions = dofile(base.."/mathFunctions.lua")
|
||||||
local util = dofile(base.."/util.lua")
|
local util = dofile(base.."/util.lua")
|
||||||
|
|
||||||
|
game.registerHandlers()
|
||||||
|
|
||||||
loadRequested = false
|
loadRequested = false
|
||||||
saveRequested = false
|
saveRequested = false
|
||||||
lastBoth = 0
|
lastBoth = 0
|
||||||
|
@ -855,81 +857,84 @@ function mainLoop (species, genome)
|
||||||
|
|
||||||
timeout = timeout - 1
|
timeout = timeout - 1
|
||||||
|
|
||||||
|
local krem = game.getKremCoins() - startKrem
|
||||||
|
if krem > lastKrem then
|
||||||
|
lastKrem = krem
|
||||||
|
timeout = timeoutConst + 60 * 5
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Continue if we haven't timed out
|
||||||
local timeoutBonus = pool.currentFrame / 4
|
local timeoutBonus = pool.currentFrame / 4
|
||||||
if timeout + timeoutBonus <= 0 then
|
if timeout + timeoutBonus > 0 then
|
||||||
|
mainLoop(species, genome)
|
||||||
local bananas = game.getBananas() - startBananas
|
|
||||||
local coins = game.getCoins() - startCoins
|
|
||||||
local krem = game.getKremCoins() - startKrem
|
|
||||||
local kong = game.getKong()
|
|
||||||
|
|
||||||
if krem > lastKrem then
|
|
||||||
lastKrem = krem
|
|
||||||
timeout = timeoutConst + 60 * 5
|
|
||||||
end
|
|
||||||
|
|
||||||
print(string.format("Bananas: %d, coins: %d, Krem: %d, KONG: %d", bananas, coins, krem, kong))
|
|
||||||
|
|
||||||
local bananaCoinsFitness = (krem * 100) + (kong * 60) + (bananas * 50) + (coins * 0.2)
|
|
||||||
if (bananas + coins) > 0 then
|
|
||||||
print("Bananas, Coins, KONG added " .. bananaCoinsFitness .. " fitness")
|
|
||||||
end
|
|
||||||
|
|
||||||
local hitPenalty = partyHitCounter * 100
|
|
||||||
local powerUpBonus = powerUpCounter * 100
|
|
||||||
|
|
||||||
local most = 0
|
|
||||||
if not vertical then
|
|
||||||
for k,v in pairs(rightmost) do
|
|
||||||
most = most + v
|
|
||||||
end
|
|
||||||
most = most - pool.currentFrame / 2
|
|
||||||
else
|
|
||||||
for k,v in pairs(upmost) do
|
|
||||||
most = most + v
|
|
||||||
end
|
|
||||||
most = most - pool.currentFrame / 2
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
local fitness = bananaCoinsFitness - hitPenalty + powerUpBonus + most + game.getJumpHeight() / 100
|
|
||||||
|
|
||||||
if startLives < lives then
|
|
||||||
local ExtraLiveBonus = (lives - startLives)*1000
|
|
||||||
fitness = fitness + ExtraLiveBonus
|
|
||||||
print("ExtraLiveBonus added " .. ExtraLiveBonus)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- FIXME sus
|
|
||||||
--[[
|
|
||||||
if rightmost > 4816 then
|
|
||||||
fitness = fitness + 1000
|
|
||||||
print("!!!!!!Beat level!!!!!!!")
|
|
||||||
end
|
|
||||||
-- ]]
|
|
||||||
if fitness == 0 then
|
|
||||||
fitness = -1
|
|
||||||
end
|
|
||||||
genome.fitness = fitness
|
|
||||||
|
|
||||||
if fitness > pool.maxFitness then
|
|
||||||
pool.maxFitness = fitness
|
|
||||||
writeFile(saveLoadFile .. ".gen" .. pool.generation .. ".pool")
|
|
||||||
end
|
|
||||||
|
|
||||||
print("Gen " .. pool.generation .. " species " .. pool.currentSpecies .. " genome " .. pool.currentGenome .. " fitness: " .. fitness)
|
|
||||||
pool.currentSpecies = 1
|
|
||||||
pool.currentGenome = 1
|
|
||||||
while fitnessAlreadyMeasured() do
|
|
||||||
nextGenome()
|
|
||||||
end
|
|
||||||
initializeRun(function()
|
|
||||||
mainLoop(species, genome)
|
|
||||||
end)
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
mainLoop(species, genome)
|
-- Timeout calculations beyond this point
|
||||||
|
-- Manipulating the timeout value won't have
|
||||||
|
-- any effect
|
||||||
|
local bananas = game.getBananas() - startBananas
|
||||||
|
local coins = game.getCoins() - startCoins
|
||||||
|
local kong = game.getKong()
|
||||||
|
|
||||||
|
print(string.format("Bananas: %d, coins: %d, Krem: %d, KONG: %d", bananas, coins, krem, kong))
|
||||||
|
|
||||||
|
local bananaCoinsFitness = (krem * 100) + (kong * 60) + (bananas * 50) + (coins * 0.2)
|
||||||
|
if (bananas + coins) > 0 then
|
||||||
|
print("Bananas, Coins, KONG added " .. bananaCoinsFitness .. " fitness")
|
||||||
|
end
|
||||||
|
|
||||||
|
local hitPenalty = partyHitCounter * 100
|
||||||
|
local powerUpBonus = powerUpCounter * 100
|
||||||
|
|
||||||
|
local most = 0
|
||||||
|
if not vertical then
|
||||||
|
for k,v in pairs(rightmost) do
|
||||||
|
most = most + v
|
||||||
|
end
|
||||||
|
most = most - pool.currentFrame / 2
|
||||||
|
else
|
||||||
|
for k,v in pairs(upmost) do
|
||||||
|
most = most + v
|
||||||
|
end
|
||||||
|
most = most - pool.currentFrame / 2
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local fitness = bananaCoinsFitness - hitPenalty + powerUpBonus + most + game.getJumpHeight() / 100
|
||||||
|
|
||||||
|
if startLives < lives then
|
||||||
|
local ExtraLiveBonus = (lives - startLives)*1000
|
||||||
|
fitness = fitness + ExtraLiveBonus
|
||||||
|
print("ExtraLiveBonus added " .. ExtraLiveBonus)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- FIXME sus
|
||||||
|
--[[
|
||||||
|
if rightmost > 4816 then
|
||||||
|
fitness = fitness + 1000
|
||||||
|
print("!!!!!!Beat level!!!!!!!")
|
||||||
|
end
|
||||||
|
-- ]]
|
||||||
|
if fitness == 0 then
|
||||||
|
fitness = -1
|
||||||
|
end
|
||||||
|
genome.fitness = fitness
|
||||||
|
|
||||||
|
if fitness > pool.maxFitness then
|
||||||
|
pool.maxFitness = fitness
|
||||||
|
writeFile(saveLoadFile .. ".gen" .. pool.generation .. ".pool")
|
||||||
|
end
|
||||||
|
|
||||||
|
print("Gen " .. pool.generation .. " species " .. pool.currentSpecies .. " genome " .. pool.currentGenome .. " fitness: " .. fitness)
|
||||||
|
pool.currentSpecies = 1
|
||||||
|
pool.currentGenome = 1
|
||||||
|
while fitnessAlreadyMeasured() do
|
||||||
|
nextGenome()
|
||||||
|
end
|
||||||
|
initializeRun(function()
|
||||||
|
mainLoop(species, genome)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue