Ich versuche, ein einfaches Optimierungsskript zu erstellen. Hier ist mein Code:Fehler beim Zurückgeben von Werten an das Array
# Analysis gives the initial inputs and outputs
$initialinputs
$initialoutputs
# The objective function
$F = ([math]::pow($initialinputs, 2)) * 2 - 3* $initialinputs
# Differentiation of the objective function
$DF = 2 * $initialinputs - 3
$ScaleFactor = 0.2
# If the optimum solution has been obtained, two termination measurements:
# maximum iteration and termination criterion(gradient)
$Maxloop = 100
$Termi = 0.001
# Create arrays
$InputsArr = @() #The array of inputs
$FunctionArr = @() #The array of function values
$DFunctionArr = @() # The array of differentiation values (Gradient)
# Calculations
#$InputsArr[0] = $initialinputs #The first input
#$FunctionArr[0] = $F[$InputsArr[0]]
#$DFunctionArr[0] = $DF[$inputsArr[0]]
for ($Innerloop = 1; $Innerloop -le $Maxloop; $Innerloop++)
{
# Calculate the second input
$InputsArr[$innerloop] = $InputsArr[$Innerloop - 1] - $ScaleFactor * (2 * $InputsArr[$Innerloop - 1] - 3)
$initialinputs = $InputsArr[$Innerloop]
# Calculate the function value
$FunctionArr[$innerloop] = ([math]::pow($initialinputs, 2)) * 2 - 3 * $initialinputs
Return, $FunctionArr
# Calculate the gradient value
$DFunctionArr[$innerloop] = 2 * $initialinputs - 3
return, $DFunctionArr
# If the gradient value less than the termination criterion (gradient),
# break the loop
if ($DFunctionArr[$innerloop] -le $Termi)
{
break
}
}
ich die leere Arrays erstellt und verwenden Sie dann die for
Schleife um die Optimierung zu tun und die Ausgänge in der Arrays zu speichern. Aber ich habe einige Fehler wie unten dargestellt:
ERROR: + $InputsArr[$Innerloop] = $initialinputs ERROR: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ERROR: + CategoryInfo : OperationStopped: (:) [], IndexOutOfRangeException ERROR: + FullyQualifiedErrorId : System.IndexOutOfRangeException ERROR: + $FunctionArr[$innerloop] = $Functionoutput ERROR: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ERROR: + CategoryInfo : OperationStopped: (:) [], IndexOutOfRangeException ERROR: + FullyQualifiedErrorId : System.IndexOutOfRangeException
Ich bin nicht ganz sicher, wie die Fehler zu beheben. Wie gebe ich den Wert an die Arrays zurück? Ist +=
der einzige Weg, dies zu tun? Ich bin jetzt verwirrt über die Arrays.
Die letzte Methode, die Sie nur die Werte in einem Array speichern gesagt kann. Ich möchte drei Berechnungen durchführen und die Werte getrennt speichern. '$ InputsArr, $ FunctionArr und $ DfunctionArr' diese drei Arrays müssen verschiedene Werte von $ initialinputs = $ InputsArr [$ Innerloop]', $ $ FunctionArr [$ innerloop] = ([math] :: pow ($ initialputs, 2)) * 2 - 3 * $ initialinputs' und '$ DFunctionArr [$ innerloop] = 2 * $ initialinputs - 3'. Ist es möglich, die letzte Methode zu verwenden, um dies zu erreichen? – rock
An vorhandene Arrays in einer Schleife anhängen, wenn Sie natürlich mehrere Arrays in derselben Schleife füllen möchten. –