HxExternalFunction Delegate

delegate long Hexaly.Optimizer.HxIntExternalFunction(HxExternalArgumentValues argumentValues)

Integer external function delegate. To use your own integer functions with Hexaly Optimizer, you have to proceed in 3 steps:

  1. Implement the delegate in a method. The method must take a HxExternalArgumentValues and must return an integer value. The argument values contain the values of the expressions passed to the function. A distinction is made between integer arguments (bool, int) and floating point arguments (double).

  2. Instantiate the function as an HxExpression with HxModel.CreateIntExternalFunction or the dedicated shortcut HxModel.IntExternalFunction.

  3. Pass arguments to your function and call it. For that, you have to create expressions of type HxOperator.Call. The first operand must be the HxExpression corresponding to your external function. The other operands must be HxExpressions that will be used as arguments. Their value will be made accessible to your external function through the HxExternalArgumentValues.

Note 1: Most of the time your external function will be called when the optimizer is in state HxState.Running. Do not attempt to call any method of the optimizer (to retrieve statistics, values of HxExpressions or whatever) in that state or an exception will be thrown.

Note 2: Your functions must be thread-safe. According to the “nbThreads” parameter, Hexaly Optimizer can be multi-threaded. In that case, your external functions must be thread safe. If you cannot guarantee the thread-safety of your code, we strongly recommend you to limit the search of Hexaly Optimizer to one thread with HxParam.SetNbThreads.

Note 3: You can provide additional data for your function (such as lower and upper bounds) with the help of the HxExternalContext associated with your function (see HxExpression.GetExternalContext).

See:

HxModel.CreateIntExternalFunction

See:

HxOperator.Call

See:

HxOperator.ExternalFunction

Since:

9.5

delegate double Hexaly.Optimizer.HxDoubleExternalFunction(HxExternalArgumentValues argumentValues)

Double external function delegate. To use your own double functions with Hexaly Optimizer, you have to proceed in 3 steps:

  1. Implement the delegate in a method. The method must take a HxExternalArgumentValues and must return a double value. The argument values contain the values of the expressions passed to the function. A distinction is made between integer arguments (bool, int) and floating point arguments (double).

  2. Instantiate the function as an HxExpression with HxModel.CreateDoubleExternalFunction or the dedicated shortcut HxModel.DoubleExternalFunction.

  3. Pass arguments to your function and call it. For that, you have to create expressions of type HxOperator.Call. The first operand must be the HxExpression corresponding to your external function. The other operands must be HxExpressions that will be used as arguments. Their value will be made accessible to your external function through the HxExternalArgumentValues.

Note 1: Most of the time your external function will be called when the optimizer is in state HxState.Running. Do not attempt to call any method of the optimizer (to retrieve statistics, values of HxExpressions or whatever) in that state or an exception will be thrown.

Note 2: Your functions must be thread-safe. According to the “nbThreads” parameter, Hexaly Optimizer can be multi-threaded. In that case, your external functions must be thread safe. If you cannot guarantee the thread-safety of your code, we strongly recommend you to limit the search of Hexaly Optimizer to one thread with HxParam.SetNbThreads.

Note 3: You can provide additional data for your function (such as lower and upper bounds) with the help of the HxExternalContext associated with your function (see HxExpression.GetExternalContext).

See:

HxModel.CreateDoubleExternalFunction

See:

HxOperator.Call

See:

HxOperator.ExternalFunction

delegate long[] Hexaly.Optimizer.HxIntArrayExternalFunction(HxExternalArgumentValues argumentValues)

Integer array external function delegate. To use integer array external functions with Hexaly Optimizer, you have to proceed in 3 steps:

  1. Implement the delegate in a method. The method must take a HxExternalArgumentValues and must return an integer array value. The argument values contain the values of the expressions passed to the function. A distinction is made between integer arguments (bool, int) and floating point arguments (double).

  2. Instantiate the function as an HxExpression with HxModel.CreateIntArrayExternalFunction or the dedicated shortcut HxModel.IntArrayExternalFunction.

  3. Pass arguments to your function and call it. For that, you have to create expressions of type HxOperator.Call. The first operand must be the HxExpression corresponding to your external function. The other operands must be HxExpressions that will be used as arguments. Their value will be made accessible to your external function through the HxExternalArgumentValues.

Note 1: Most of the time your external function will be called when the optimizer is in state HxState.Running. Do not attempt to call any method of the optimizer (to retrieve statistics, values of HxExpressions or whatever) in that state or an exception will be thrown.

Note 2: Your functions must be thread-safe. According to the “nbThreads” parameter, Hexaly Optimizer can be multi-threaded. In that case, your external functions must be thread safe. If you cannot guarantee the thread-safety of your code, we strongly recommend you to limit the search of Hexaly Optimizer to one thread with HxParam.SetNbThreads.

Note 3: To optimize performance, you can return the same array object per thread from one call to another.

Note 4: You can provide additional data for your function (such as lower and upper bounds) with the help of the HxExternalContext associated with your function (see HxExpression.GetExternalContext).

Since:

11.0

See:

HxModel.CreateIntArrayExternalFunction

See:

HxOperator.Call

See:

HxOperator.ExternalFunction

delegate double[] Hexaly.Optimizer.HxDoubleArrayExternalFunction(HxExternalArgumentValues argumentValues)

Double array external function delegate. To use double array external functions with Hexaly Optimizer, you have to proceed in 3 steps:

  1. Implement the delegate in a method. The method must take a HxExternalArgumentValues and must return a double array value. The argument values contain the values of the expressions passed to the function. A distinction is made between integer arguments (bool, int) and floating point arguments (double).

  2. Instantiate the function as an HxExpression with HxModel.CreateDoubleArrayExternalFunction or the dedicated shortcut HxModel.DoubleArrayExternalFunction.

  3. Pass arguments to your function and call it. For that, you have to create expressions of type HxOperator.Call. The first operand must be the HxExpression corresponding to your external function. The other operands must be HxExpressions that will be used as arguments. Their value will be made accessible to your external function through the HxExternalArgumentValues.

Note 1: Most of the time your external function will be called when the optimizer is in state HxState.Running. Do not attempt to call any method of the optimizer (to retrieve statistics, values of HxExpressions or whatever) in that state or an exception will be thrown.

Note 2: Your functions must be thread-safe. According to the “nbThreads” parameter, Hexaly Optimizer can be multi-threaded. In that case, your external functions must be thread safe. If you cannot guarantee the thread-safety of your code, we strongly recommend you to limit the search of Hexaly Optimizer to one thread with HxParam.SetNbThreads.

Note 3: To optimize performance, you can return the same array object per thread from one call to another.

Note 4: You can provide additional data for your function (such as lower and upper bounds) with the help of the HxExternalContext associated with your function (see HxExpression.GetExternalContext).

Since:

11.0

See:

HxModel.CreateDoubleArrayExternalFunction

See:

HxOperator.Call

See:

HxOperator.ExternalFunction