diff options
Diffstat (limited to 'src/act4e_solutions')
-rw-r--r-- | src/act4e_solutions/currency_ex.py | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/act4e_solutions/currency_ex.py b/src/act4e_solutions/currency_ex.py index c0b6b1b..fbb9775 100644 --- a/src/act4e_solutions/currency_ex.py +++ b/src/act4e_solutions/currency_ex.py @@ -9,4 +9,22 @@ class SolCurrencyOptimization(I.CurrencyOptimization): amount: float, target: str, ) -> I.OptimalSolution: - pass + source, target = available.get_object(source), available.get_object(target) + + results = {} + for l in range(available.objects().size() + 1): + paths = available.hom(source, target, l) + for p in paths.elements(): + # Allow to go through exchanges only once + names = p.label.split(";") + if any([names.count(n) > 1 for n in names]): + continue + + rate, commission = p.mordata.rate, p.mordata.commission + res = amount * rate - commission + results[res] = p + + final = max(results.keys()) + path = results[final].label.split(";") + return I.OptimalSolution(path, final) + |