本文整理汇总了C#中INetwork.MultipleSteps方法的典型用法代码示例。如果您正苦于以下问题:C# INetwork.MultipleSteps方法的具体用法?C# INetwork.MultipleSteps怎么用?C# INetwork.MultipleSteps使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类INetwork
的用法示例。
在下文中一共展示了INetwork.MultipleSteps方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: generateGenome
public override NeatGenome.NeatGenome generateGenome(INetwork network)
{
#if OUTPUT
System.IO.StreamWriter sw = new System.IO.StreamWriter("testfile.txt");
#endif
ConnectionGeneList connections = new ConnectionGeneList((int)((inputCount * hiddenCount) + (hiddenCount * outputCount)));
float[] coordinates = new float[4];
float output;
uint connectionCounter = 0;
int iterations = 2 * (network.TotalNeuronCount - (network.InputNeuronCount + network.OutputNeuronCount)) + 1;
coordinates[0] = -1 + inputDelta / 2.0f;
coordinates[1] = -1;
coordinates[2] = -1 + hiddenDelta / 2.0f;
coordinates[3] = 0;
for (uint source = 0; source < inputCount; source++, coordinates[0] += inputDelta)
{
coordinates[2] = -1 + hiddenDelta / 2.0f;
for (uint target = 0; target < hiddenCount; target++, coordinates[2] += hiddenDelta)
{
//Since there are an equal number of input and hidden nodes, we check these everytime
network.ClearSignals();
network.SetInputSignals(coordinates);
network.MultipleSteps(iterations);
output = network.GetOutputSignal(0);
#if OUTPUT
foreach (double d in inputs)
sw.Write(d + " ");
sw.Write(output);
sw.WriteLine();
#endif
if (Math.Abs(output) > threshold)
{
float weight = (float)(((Math.Abs(output) - (threshold)) / (1 - threshold)) * weightRange * Math.Sign(output));
connections.Add(new ConnectionGene(connectionCounter++, source, target + inputCount + outputCount, weight));
}
//Since every other hidden node has a corresponding output node, we check every other time
if (target % 2 == 0)
{
network.ClearSignals();
coordinates[1] = 0;
coordinates[3] = 1;
network.SetInputSignals(coordinates);
network.MultipleSteps(iterations);
output = network.GetOutputSignal(0);
#if OUTPUT
foreach (double d in inputs)
sw.Write(d + " ");
sw.Write(output);
sw.WriteLine();
#endif
if (Math.Abs(output) > threshold)
{
float weight = (float)(((Math.Abs(output) - (threshold)) / (1 - threshold)) * weightRange * Math.Sign(output));
connections.Add(new ConnectionGene(connectionCounter++, source + inputCount + outputCount, (target / 2) + inputCount, weight));
}
coordinates[1] = -1;
coordinates[3] = 0;
}
}
}
#if OUTPUT
sw.Flush();
#endif
return new SharpNeatLib.NeatGenome.NeatGenome(0, neurons, connections, (int)inputCount, (int)outputCount);
}
示例2: generateGenome
public virtual NeatGenome.NeatGenome generateGenome(INetwork network)
{
float[] coordinates = new float[4];
float output;
uint connectionCounter = 0;
int iterations = 2 * (network.TotalNeuronCount - (network.InputNeuronCount + network.OutputNeuronCount)) + 1;
ConnectionGeneList connections=new ConnectionGeneList();
if (hiddenCount > 0)
{
coordinates[0] = -1 + inputDelta / 2.0f;
coordinates[1] = -1;
coordinates[2] = -1 + hiddenDelta / 2.0f;
coordinates[3] = 0;
for (uint input = 0; input < inputCount; input++, coordinates[0] += inputDelta)
{
coordinates[2] = -1 + hiddenDelta / 2.0f;
for (uint hidden = 0; hidden < hiddenCount; hidden++, coordinates[2] += hiddenDelta)
{
network.ClearSignals();
network.SetInputSignals(coordinates);
network.MultipleSteps(iterations);
output = network.GetOutputSignal(0);
if (Math.Abs(output) > threshold)
{
float weight = (float)(((Math.Abs(output) - (threshold)) / (1 - threshold)) * weightRange * Math.Sign(output));
connections.Add(new ConnectionGene(connectionCounter++, input, hidden + inputCount + outputCount, weight));
}
}
}
coordinates[0] = -1 + hiddenDelta / 2.0f;
coordinates[1] = 0;
coordinates[2] = -1 + outputDelta / 2.0f;
coordinates[3] = 1;
for (uint hidden = 0; hidden < hiddenCount; hidden++, coordinates[0] += hiddenDelta)
{
coordinates[2] = -1 + outputDelta / 2.0f;
for (uint outputs = 0; outputs < outputCount; outputs++, coordinates[2] += outputDelta)
{
network.ClearSignals();
network.SetInputSignals(coordinates);
network.MultipleSteps(iterations);
output = network.GetOutputSignal(0);
if (Math.Abs(output) > threshold)
{
float weight = (float)(((Math.Abs(output) - (threshold)) / (1 - threshold)) * weightRange * Math.Sign(output));
connections.Add(new ConnectionGene(connectionCounter++, hidden + inputCount + outputCount, outputs + inputCount, weight));
}
}
}
}
else
{
coordinates[0] = -1 + inputDelta / 2.0f;
coordinates[1] = -1;
coordinates[2] = -1 + outputDelta / 2.0f;
coordinates[3] = 1;
for (uint input = 0; input < inputCount; input++, coordinates[0] += inputDelta)
{
coordinates[2] = -1 + outputDelta / 2.0f;
for (uint outputs = 0; outputs < outputCount; outputs++, coordinates[2] += outputDelta)
{
network.ClearSignals();
network.SetInputSignals(coordinates);
network.MultipleSteps(iterations);
output = network.GetOutputSignal(0);
if (Math.Abs(output) > threshold)
{
float weight = (float)(((Math.Abs(output) - (threshold)) / (1 - threshold)) * weightRange * Math.Sign(output));
connections.Add(new ConnectionGene(connectionCounter++, input, outputs + inputCount, weight));
}
}
}
}
return new SharpNeatLib.NeatGenome.NeatGenome(0, neurons, connections, (int)inputCount, (int)outputCount);
}