【发布时间】:2016-06-08 16:33:42
【问题描述】:
我尝试创建一个简单的优化脚本。这是我的代码:
# 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
}
}
我创建了空数组,然后使用for 循环进行优化并将输出存储在数组中。但是我得到了一些错误,如下所示:
错误:+ $InputsArr[$Innerloop] = $initialinputs 错误:+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 错误:+ CategoryInfo:OperationStopped: (:) [], IndexOutOfRangeException 错误:+ FullyQualifiedErrorId:System.IndexOutOfRangeException 错误:+ $FunctionArr[$innerloop] = $Functionoutput 错误:+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 错误:+ CategoryInfo:OperationStopped: (:) [], IndexOutOfRangeException 错误:+ FullyQualifiedErrorId:System.IndexOutOfRangeException
我不太确定如何修复这些错误。如何将值返回到数组? += 是唯一的方法吗?我现在对数组感到困惑。
【问题讨论】:
标签: arrays powershell