В настоящее время я пишу функцию для решения задач оптимизации, когда входные данные меняются:
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
.
Спасибо, это было действительно полезно! Я немного красный о многократной отправке