我正在尝试运行用Lua编写的精彩Mar I / O人工智能(更多内容见https://youtu.be/qv6UVOQ0F44)
AI在BizHawk仿真器(v.2.1.1)的Lua(v.5.1)控制台中成功运行,但在尝试重新加载算法的先前状态时出现错误。
打开文件后,似乎文件:read(“* number”)将始终返回0,而read(“* all”)和“* line”都正确读取内容。我也试过“* n”但没有运气。
完整脚本:https://pastebin.com/ZZmSNaHX
function loadFile(filename)
local file = io.open(filename, "r")
pool = newPool()
pool.generation = file:read("*number")
pool.maxFitness = file:read("*number")
...
function writeFile(filename)
local file = io.open(filename, "w")
file:write(pool.generation .. "\n")
file:write(pool.maxFitness .. "\n")
...
生成的文件以:
开头18[LF]
1938[LF]
...
但是,我只在控制台中看到0:
console.writeline("Gen " .. pool.generation) --> "Gen 0"
console.writeline("Max Fitness " .. pool.maxFitness) --> "Max Fitness 0"
令人费解的是,这个脚本已经在不同的论坛中讨论过,似乎没有人报告同样的问题。
答案 0 :(得分:2)
我发现BizHawk模拟器正在使用Lua的自定义版本。 此问题出现在模拟器的2.1.1版中。以前的版本工作正常。
感谢您的帮助社区
答案 1 :(得分:0)
读取数字的格式为' n',file:read(' n')。有关read()格式说明符的详细信息,请参阅https://www.lua.org/manual/5.3/manual.html#pdf-file:read。
答案 2 :(得分:0)
大约在那个时候,BizHawk添加了另一个c#lua实现'kopilua',以解决深层崩溃问题。 kopilua的一个缺点是不符合要求的字符串解析和文件IO。你必须使用config>自定义>高级> Lua + LuaInterface为了使用正常的lua;它不会有这个问题。