功能: 在最短路径求解中，可以使用启发式方式求解，这时就需要建立优化变量与误差函数。

优化变量: 最短路径的所有顶点为优化变量,变量范围可以设置为[0,1]
优化误差: 最短路径权重和

因此使用如下代码在启发式窗口求解时，变量上限设置为1，变量下限设置为0，变量个数设置为顶点个数。

例子1:
//对应函数 LineProgSP
//已知有100个顶点,第i个顶点到第j个顶点权重表示为w(i,j), 这时想问，从顶点1到顶点100最短路径是多少
//将如下代码拷贝到启发式优化界面,注意权重矩阵w必须事先在【矩阵运算】窗口创建或者导入。
//优化执行结束后，会将节点变量保存为 p

Public Function TargetFun(ByRef var() As Double, ByRef obj As List(Of Object)) As Double
    Return obj(0).CalcWeight(var)
End Function

Public Sub RunStart(ByRef obj As List(Of Object))
    Dim w As Double(,) = API_GetMatrix("w")
    Dim f As New ClassProgShortPath
    f.InitByWeightMatrix(w,1,100)
    obj.add(f)
End Sub

Public Sub RunEnd(ByVal er As Double, ByRef var() As Double, ByRef obj As List(Of Object))
    obj(0).CalcWeight(var)

    Dim id() As int32 = obj(0).GetPath()
    API_SetMatrix("p", id)  
End Sub

例子2:
//对应函数 LineProgSP2
//已知有100个顶点, 以及顶点索引矩阵w, w为一个列数为3的矩阵变量,第1列存储起始节点索引,第2列存储结束节点索引,第3列存储起始节点到结束节点索引权重, 这时想问，从顶点1到顶点100最短路径是多少
//将如下代码拷贝到启发式优化界面,注意权重矩阵w必须事先在【矩阵运算】窗口创建或者导入。
//优化执行结束后，会将节点变量保存为 p

Public Function TargetFun(ByRef var() As Double, ByRef obj As List(Of Object)) As Double
    Return obj(0).CalcWeight(var)
End Function

Public Sub RunStart(ByRef obj As List(Of Object))
    Dim w As Double(,) = API_GetMatrix("w")
    Dim f As New ClassProgShortPath
    f.InitByIndexMatrix(w,1,100)
    obj.add(f)
End Sub

Public Sub RunEnd(ByVal er As Double, ByRef var() As Double, ByRef obj As List(Of Object))
    obj(0).CalcWeight(var)
    
    Dim id() As int32 = obj(0).GetPath()
    API_SetMatrix("p", id)
End Sub

例子3:【旅行商问题】
//对应函数 LineProgTSP
//下面 InitByWeight、InitBy2DPosition、InitBy3DPosition 函数初始化数据
Public Function TargetFun(ByRef var() As Double, ByRef obj As List(Of Object)) As Double
    Return obj(0).CalcWeight(var)
End Function

Public Sub RunStart(ByRef obj As List(Of Object))
    Dim w As Double(,) = API_GetMatrix("w")
    Dim f As New ClassProgTSP
    'f.InitByWeight(w)'w为n*n的权重矩阵
     f.InitBy2DPosition(w)'w为列数为2,每一行表示一个二D坐标
    'f.InitBy3DPosition(w)'w为列数为3,每一行表示一个三D坐标
    obj.add(f)
End Sub

Public Sub RunEnd(ByVal er As Double, ByRef var() As Double, ByRef obj As List(Of Object))
    obj(0).CalcWeight(var)
    Dim id() As int32 = obj(0).GetPath()
    API_SetMatrix("p", id)
End Sub