LocalSolver快速入门指南(连载二十八) ---External functions外部函数

LocalSolver的External functions外部函数

外部函数是LocalSolver的一个特殊功能,它允许您为模型创建自己的操作符。他们有两个主要目的:

  1. 创建无法用LocalSolver的可用的运算符轻松表示的表达式。例如,LocalSolver没有用于反三角函数(如arctanarcinarccos)的特殊运算符。对于外部函数,只要您的编码语言允许,就可以创建它们。实际上,只要返回有效的整数或浮点数,几乎可以创建任何所需的运算符或函数。
  2. 缩小数学模型的尺寸。如果有许多等价表达式或循环模式,可以用外部函数替换它,以减少模型中表达式的数量,从而减少LocalSolver的内存占用,提高全局搜索性能。

注意

 

即使外部函数是一个非常强大且易于使用的特性,您也必须注意文档末尾列出的几个陷阱,尤其是线程安全问题。

使用原则

要在模型中使用外部函数,必须分三步进行:

  1. 创建并编写函数。确切的实施方法取决于目标语言(实现接口、使用委托等),但主要原则是相同的:参数列表作为输入提供给代码,它必须返回整数或浮点数作为输出。
  2. 实例化你的函数并将其转换为一个LSExpression,这样就可以用于其他表达式。在这一步结束时,您将得到一个类型为O_ExternalFunction的LSExpression,它本身没有值,但可以在O_Call表达式中使用。您可以选择提供有关函数的附加数据(例如下限、上限以及函数是否可以返回NaN值)。这是通过访问和修改函数的LSExternalContext来实现的。
  3. 向函数传递参数并调用它。为此,您必须创建O_Call类型的表达式。第一个操作数将是在步骤2中创建的外部函数,其他操作数将是其他LSExpression。这些操作数的值将在搜索期间传递给您的代码/函数。

您可以将外部函数与LSP建模语言以及LocalSolver API支持的所有语言(Pythonc++Java. net)一起使用。下一章:外部函数的示例 。  无锡迅合信息科技有限公司LocalSolver独家代理商。

Guess you like

Origin blog.csdn.net/qq_31243247/article/details/118153254