输入数量不同的函数

标签 function optimization input julia

我目前正在编写一个函数来解决输入变化的优化问题:

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/

相关文章:

C 参数数组声明符

javascript - 有没有一种方法可以用动态名称处理 javascript 函数?

algorithm - 两个指定顶点之间的最短两条不相交路径

python - 如何让用户在两个选项之间进行选择?

Java检查字符串中的重复字母

javascript - 箭头函数中的三元运算符

c - 将一个函数中矩阵的内容发送到另一个函数中的矩阵

python - 具有行业级约束的 SciPy 投资组合优化

sql - 更清洁的手动更新多行的方式

C++ 如何防止无效输入?