@@ -93,7 +93,7 @@ A steady state result for 1000 parameter points
9393"""
9494function get_steady_states (prob:: Problem , swept_parameters:: ParameterRange , fixed_parameters:: ParameterList ;
9595 method= :warmup , threading = Threads. nthreads () > 1 , show_progress= true ,
96- sorting= " nearest" , classify_default= true , seed= nothing )
96+ sorting= " nearest" , classify_default= true , seed= nothing , kwargs ... )
9797
9898 # set seed if provided
9999 ! isnothing (seed) && Random. seed! (seed)
@@ -108,8 +108,9 @@ function get_steady_states(prob::Problem, swept_parameters::ParameterRange, fixe
108108
109109 input_array = _prepare_input_params (prob, swept_parameters, unique_fixed)
110110 # feed the array into HomotopyContinuation, get back an similar array of solutions
111- raw = _get_raw_solution (prob, input_array;
112- sweep= swept_parameters, method= method, threading= threading, show_progress= show_progress, seed= seed)
111+ raw = _get_raw_solution (
112+ prob, input_array; sweep= swept_parameters, method= method, threading= threading,
113+ show_progress= show_progress, seed= seed, kwargs... )
113114
114115 # extract all the information we need from results
115116 # rounded_solutions = unique_points.(HomotopyContinuation.solutions.(getindex.(raw, 1)); metric = EuclideanNorm(), atol=1E-14, rtol=1E-8)
@@ -249,20 +250,20 @@ end
249250" A random warmup solution is computed to use as `start_parameters` in the homotopy."
250251function _solve_warmup (problem:: Problem , params_1D, sweep; threading, show_progress)
251252 # complex perturbation of the warmup parameters
252- complex_pert = [1e-2 * issubset (p, keys (sweep)) * randn (ComplexF64) for p in problem. parameters]
253+ complex_pert = [1e-5 * randn (ComplexF64) for p in problem. parameters]
253254 real_pert = ones (length (params_1D[1 ]))
254255 warmup_parameters = params_1D[end ÷ 2 ] .* (real_pert + complex_pert)
255256
256257 warmup_solution =
257- HC. solve (problem. system;
258+ HC. solve (problem. system; start_system = :total_degree ,
258259 target_parameters= warmup_parameters, threading= threading, show_progress= show_progress
259260 )
260261 return warmup_parameters, warmup_solution
261262end
262263
263264" Uses HomotopyContinuation to solve `problem` at specified `parameter_values`."
264265function _get_raw_solution (problem:: Problem , parameter_values;
265- sweep= ParameterRange (), method= :warmup , threading= false , show_progress= true , seed= nothing )
266+ sweep= ParameterRange (), method= :warmup , threading= false , show_progress= true , seed= nothing , kwargs ... )
266267 # HomotopyContinuation accepts 1D arrays of parameter sets
267268 params_1D = reshape (parameter_values, :, 1 )
268269
@@ -274,18 +275,18 @@ function _get_raw_solution(problem::Problem, parameter_values;
274275 HC. solve (
275276 problem. system, HC. solutions (warmup_solution);
276277 start_parameters= warmup_parameters, target_parameters= parameter_values,
277- threading= threading, show_progress= show_progress, seed= seed
278+ threading= threading, show_progress= show_progress, seed= seed, kwargs ...
278279 )
279- elseif method== :total_degree
280+ elseif method== :total_degree || method == :polyhedral
280281 result_full = Array {Vector{Any}, 1} (undef, length (parameter_values))
281282 if show_progress
282- bar = Progress (length (parameter_values), 1 , " Solving via total degree homotopy ..." , 50 )
283+ bar = Progress (length (parameter_values), 1 , " Solving via $method homotopy ..." , 50 )
283284 end
284285 for i in eachindex (parameter_values) # do NOT thread this
285286 p = parameter_values[i]
286287 show_progress ? next! (bar) : nothing
287288 result_full[i] = [
288- HC. solve (problem. system; start_system= :total_degree ,
289+ HC. solve (problem. system; start_system= method ,
289290 target_parameters= p, threading= threading, show_progress= false , seed= seed), p]
290291 end
291292 else
0 commit comments