试试 ProcessStartInfo 类。 MSDN ProcessStartInfo
因为这是针对 AI 课程的。我可能会做一个PacmanArgument 类。 PacmanArgument 将具有每个可能的命令行参数的属性和要调用的自定义 ToString 方法。假设输出可以被读取为适应度,以编程方式为诸如遗传算法之类的东西生成参数会更容易。
主要功能:
double MAX_EPSILON = 1; //I assume there are constraints
//create packman agent with initial values
PacmanAgent agent = new PackmanAgent(0,0,0) //epsilon,alpha,gamma
//create Process info
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "pacman.py"
psi.WorkingDirectory = @"C:/FilePathToPacman"
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
string output;
Console.WriteLine("***** Increasing Eplison Test *****");
while( agent.Epsilon =< MAX_EPSILON )
{
psi.Arguments = agent.GetArgument();
// Start the process with the info we specified.
// Call WaitForExit and then the using-statement will close.
using (Process process = Process.Start(psi))
{
output = process.StandardOutput.ReadToEnd(); //pipe output to c# variable
process.WaitForExit(); //wait for pacman to end
}
//Do something with test output
Console.WriteLine("Epsilon: {0}, Alpha: {1}, Gamma: {2}",agent.Epsilon,agent.Alpha,agent.Gamma );
Console.WriteLine("\t" + output);
agent.IncrementEpsilon(0.05); //increment by desired value or default(set in IncrementEpsilon function)
}
吃豆人代理类:
public class PacmanAgent
{
private string ArgumentBase = "-q -p PacmanQAgent -x 2000 -n 2010 -l smallGrid -a ";
[Range(0, 1, ErrorMessage = "Value for {0} must be between {1} and {2}.")]
public double Epsilon { get; set; }
[Range(0, 1, ErrorMessage = "Value for {0} must be between {1} and {2}.")]
public double Alpha { get; set; }
[Range(0, 1, ErrorMessage = "Value for {0} must be between {1} and {2}.")]
public double Gamma { get; set; }
public PacmanAgent(int epsilon, int alpha , int gamma )
{
Epsilon = epsilon;
Alpha = alpha;
Gamma = gamma;
}
public string GetArgument()
{
string argument = string.Format("{0} epsilon={1}, alpha={2}, gamma={3}", ArgumentBase, Epsilon, Alpha, Gamma)
return argument
}
public void IncrementEpsilon(double i = 0.01)
{
Epsilon += i;
}
public void IncrementAlpha(double i = 0.01)
{
Alpha += i;
}
public void IncrementGamma(double i = 0.01)
{
Gamma += i;
}
}
*我是在 IDE 外面写的,所以请原谅任何语法错误