diff options
Diffstat (limited to 'worldalign/match_battery.py')
| -rw-r--r-- | worldalign/match_battery.py | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/worldalign/match_battery.py b/worldalign/match_battery.py index 9035e62..63a4bf1 100644 --- a/worldalign/match_battery.py +++ b/worldalign/match_battery.py @@ -142,11 +142,19 @@ def solve_faq_multi(visual, shuffled, **_): """FAQ from many random doubly stochastic starts, best by its own objective.""" from scipy.optimize import quadratic_assignment - result = quadratic_assignment( - visual, shuffled, method="faq", - options={"maximize": True, "n_init": 30, "rng": 0}, - ) - return result.col_ind + # scipy's FAQ takes no `n_init`; passing one is silently swallowed into + # unknown_options, which is why an earlier version of this function + # returned bit-identical results to plain FAQ. Restart explicitly. + best, best_value = None, -np.inf + for seed in range(15): + result = quadratic_assignment( + visual, shuffled, method="faq", + options={"maximize": True, "rng": seed, "P0": "randomized"}, + ) + value = float((visual * shuffled[np.ix_(result.col_ind, result.col_ind)]).sum()) + if value > best_value: + best, best_value = result.col_ind, value + return best def solve_2opt(visual, shuffled, **_): |
