summaryrefslogtreecommitdiffstats
path: root/src/act4e_solutions
diff options
context:
space:
mode:
authorNao Pross <np@0hm.ch>2023-11-18 11:40:09 +0100
committerNao Pross <np@0hm.ch>2023-11-18 11:40:09 +0100
commit39a659320560f138820c0ecbcbeaf5762f32decd (patch)
tree120be837b3c0c999266c2cad7c18f49cf822392a /src/act4e_solutions
parentFix semicategory loading (diff)
downloadact4e-alphubel-prod.tar.gz
act4e-alphubel-prod.zip
Pass TestCurrencyOptimizationalphubel-prod
Diffstat (limited to '')
-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)
+