summaryrefslogtreecommitdiffstats
path: root/src/act4e_solutions
diff options
context:
space:
mode:
Diffstat (limited to 'src/act4e_solutions')
-rw-r--r--src/act4e_solutions/currency_ex.py20
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)
+