solvers.wrappers.QNS

qns_immfeed_refusal(sn)

REASON = QNS_IMMFEED_REFUSAL(SN) Why SolverQNS cannot serve a model with immediate feedback, or ‘’ when the model has none.

Immediate feedback (sn.immfeed) keeps a self-looping job on its server instead of re-queueing it, and neither path of SolverQNS can state that: the JMVA document qnsolver reads carries a mean demand and a visit count per chain, and the LQN QN2LQN writes turns the routing into OR-fork precedences of pseudo-activities on the reference task, where a repeated visit is a new call. Either would answer for re-queueing under this solver’s name.

ONE PREDICATE, TWO CALLERS: SolverQNS.supportsModelMethod (the gate, hence model.help and SolverAUTO) and SolverQNS.runAnalyzer (the run, for a caller with enableChecks off). SolverJMT keeps its own wording in jmtMethodRefusal.

Copyright (c) 2012-2026, Imperial College London All rights reserved.

qns_multiserver_refusal(sn, method)

[OK, REASON] = QNS_MULTISERVER_REFUSAL(SN, METHOD) Whether qnsolver’s own -m switch offers this multiserver approximation.

ASKED ON THE CONFIG VALUE, NOT ON THE METHOD NAME, and the distinction is the whole reason this is not a gate. The outer switch in SOLVER_QNS sets options.config.multiserver only for conway/reiser/rolia/zhou, so SolverQNS(model,’suri’) leaves it at ‘default’, takes the {‘default’,’conway’} arm and answers with Conway – reporting ‘conway’ as the actual method. That is an honest substitution and the row is genuinely runnable, so @SolverQNS/supportsModelMethod deliberately does NOT withdraw it.

What this refuses is the direct options.config.multiserver=’suri’, which no arm matches: CMD was never assigned and the failure surfaced as an undefined-variable error about a temporary rather than as a diagnosis. A condition on the OPTIONS is not something a feature set or a model gate can state, which is why it lives here.

‘qnsolver -m’ accepts conway, reiser, rolia and zhou. ‘suri’ and ‘schmidt’ are LQNS approximations, reachable only on the non-product-form closed SolverLQNS branch, and qnsolver has no flag for either.

THE RULE IS INSIDE THE MULTISERVER BRANCH, and that is not a detail. Without a multiserver station the reference emits no -m at all and answers under the caller’s method name, so refusing ‘suri’ there would refuse a model this solver does solve. With one, SOLVER_QNS used to fall off its inner switch and leave CMD unassigned, so the failure surfaced as an undefined-variable error about a temporary rather than as a diagnosis naming the method. The C++ port has diagnosed this since it was written (solver_qns.h, is_qnsolver_multiserver); this is the same rule, stated where MATLAB, the JAR and python can all reach it.

solver_qns(sn, options)

[Q,U,R,T,C,X] = SOLVER_QNS(QN, OPTIONS)

solver_qns_analyzer(sn, options)

[QN,UN,RN,TN,CN,XN,RUNTIME,ACTUALMETHOD] = SOLVER_QNS_ANALYZER(QN, OPTIONS)