Этот вопрос относится к C#'s Lunar Lander Example, полученному в репозитории Encog. Как видно из примера, я использую NeuralSimulatedAnnealing тренировать свою многослойную с прогнозированием сети (50 эпоха-х)Encog Lunar Lander Extended
BasicNetwork network = CreateNetwork();
IMLTrain train;
train = new NeuralSimulatedAnnealing(network, new PilotScore(), 10, 2, 100);
_
public static BasicNetwork CreateNetwork() {
var pattern = new FeedForwardPattern {InputNeurons = 3};
pattern.AddHiddenLayer(50);
pattern.OutputNeurons = 1;
pattern.ActivationFunction = new ActivationTANH();
var network = (BasicNetwork) pattern.Generate();
network.Reset();
return network;
}
пример работает отлично и нейронная пилот точно узнает, как посадить космический корабль в данных условиях, однако я хочу чего-то большего!
Для этого я создал класс глобал, такие как ниже, а также модифицированные строки в классе LanderSimulator
namespace Encog.Examples.Lunar
{
class globals
{
public static int fuelConsumption { get; set; }
}
}
_
public void Turn(bool thrust){
Seconds++;
Velocity -= Gravity;
Altitude += Velocity;
if (thrust && Fuel > 0)
{
Fuel-= globals.fuelConsumption; //changed instead of Fuel--;
Velocity += Thrust;
}
Velocity = Math.Max(-TerminalVelocity, Velocity);
Velocity = Math.Min(TerminalVelocity, Velocity);
if (Altitude < 0)
Altitude = 0;
}
Так что теперь в зависимости от fuelConsumption переменного топлива является потребляемый при каждом нажатии. Тогда я попытался с тремя различными значениями fuelConsumption и следующие были соответствующие лучшие результаты для отдельных сетей:
//NETWORK 1
globals.fuelConsumption = 1;
bestScore: 7986
//NETWORK 2
globals.fuelConsumption = 5;
bestScore: 7422
//NETWORK 3
globals.fuelConsumption = 10;
bestScore: 6921
Когда я тестировал эти сети друг от друга результаты были неутешительными:
- сеть 1 показал счет от -39591 и -39661, когда FuelConsumed составлял 5 и 10 соответственно.
- Сеть 2 показала оценку -8832 и -35671, когда FuelConsumed был 1 и 10 соответственно.
- Сеть 3 показала оценку -24510 и -19697, когда FuelConsumed составлял 1 и 5 соответственно.
Так что я попытался обучить одну единую сеть для всех трех сценариев, как показано ниже:
int epoch;
epoch = 1;
globals.fuelConsumption = 1;
for (int i = 0; i < 50; i++){
train.Iteration();
Console.WriteLine(@"Epoch #" + epoch + @" Score:" + train.Error);
epoch++;
}
Console.WriteLine("--------------------------------------");
epoch = 1;
globals.fuelConsumption = 5;
for (int i = 0; i < 50; i++){
train.Iteration();
Console.WriteLine(@"Epoch #" + epoch + @" Score:" + train.Error);
epoch++;
}
Console.WriteLine("--------------------------------------");
epoch = 1;
globals.fuelConsumption = 10;
for (int i = 0; i < 50; i++){
train.Iteration();
Console.WriteLine(@"Epoch #" + epoch + @" Score:" + train.Error);
epoch++;
}
Console.WriteLine(@"The score of experienced pilot is:");
network = (BasicNetwork) train.Method;
var pilot = new NeuralPilot(network, false);
globals.fuelConsumption = 1;
Console.WriteLine("@1: " + pilot.ScorePilot());
globals.fuelConsumption = 5;
Console.WriteLine("@5: " + pilot.ScorePilot());
globals.fuelConsumption = 10;
Console.WriteLine("@10: " + pilot.ScorePilot());
Но результаты опять тот же
The score of experienced pilot is:
@1: -27485
@5: -27565
@10: 7448
Как создать нейронную пилот, который даст мне лучший результат во всех трех сценариях?
примечание это такой же ** сеть ** и ** speciation ** используются последовательно но over новый ** тренер ** каждый раз. Это логично правильно? – dexterslab