我目前正在编写一个函数来解决输入变化的优化问题:
function solve_problem!(f, x0, lvar, uvar, c, lcon, ucon); #If there are constraints
function solve_problem!(f, x0, lvar, uvar); #If there are no constraints.
我通过执行以下操作解决了这个问题;
function solve_problem!(f, x0, lvar, uvar, c = 0, lcon = 0, ucon = 0;)
if c !=0
nlp = ADNLPModel(f_mod, x0, lvar, uvar, c, lcon, ucon);
else
nlp = ADNLPModel(f_mod, x0, lvar, uvar)
end
end
但是,有更好的方法吗?它正在工作,但我不觉得这是一个好的编码。谢谢!
我想不出另一种方法来做到这一点,因为 ADNLPModel 是一个已经存在的函数。
最佳答案
为什么不使用 ADNLPModel
已使用的相同方法?
Julia 是一种多重调度语言 - 您可以而且应该具有相同的方法名称,通过参数的数量(也许还有它们的类型)来区分。
function solve_problem!(f, x0, lvar, uvar, c, lcon = 0, ucon = 0)
nlp = ADNLPModel(f_mod, x0, lvar, uvar, c, lcon, ucon)
do_something(nlp)
end
function solve_problem!(f, x0, lvar, uvar)
nlp = ADNLPModel(f_mod, x0, lvar, uvar)
do_something(nlp)
end
如果您由于某种原因无法使用多重调度,但仍需要检查参数分配,我建议使用 nothing
作为默认值,而不是 0
。
关于输入数量不同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75445615/