代写data编程、代做Python,c++程序

- 首页 >> C/C++编程
Algorithm Design and Analysis S2 2023
Software Assignment
Solving Currency Exchange Problems
Group work by 3-4 students.
Due Date 08 Dec 2023.
Background: A currency exchange graph is a graph whose n nodes represent different currencies, and whose directed edges represent exchange rates ruv
between those currencies.
In financial markets, arbitrage opportunities arise when one can buy a set
of currencies and sell them in a sequence to end up with more of the starting currency, without any net investment. In a currency exchange graph,
this translates to finding a cycle where the product of the exchange rates is
greater than 1. For example if we have three currencies A, B and C, with
rates rAB = 0.651, rBC = 0.952, rCA = 1.711, then the product of the rates
rAB × rBC × rCA = 0.651 × 0.952 × 1.711 ≈ 1.060, which means 6% profit if
trading through the cycle A-B-C-A.
A currency exchange graph with negative logarithm is a currency exchange graph with each edge associated with the negative logarithm of the
exchange rates as the weights, e.g.,
w(A, B) = −log(rAB) ≈ 0.186,
w(B, C) = −log(rBC ) ≈ 0.021,
w(C, A) = −log(rCA) ≈ −0.233.
We then have
w(A, B) + w(B, C) + w(C, A) = −log(rAB × rBC × rCA) ≈ −0.025 < 0,
as rAB × rBC × rCA ≈ 1.060 > 1. This means if the sum of the weights
is negative (i.e., there is a cycle of negative weights), there is an arbitrage
opportunity.
Note that a currency exchange graph can be represented as n × n adjacency
matrix with currency exchange rates. You don’t have to consider the case where
there is no direct exchange rate between two currencies.
Tasks: To use shortest path algorithms in dynamic programming for solving
the Currency Exchange Problem:
• Detecting arbitrage opportunities in a currency exchange system
1
The input: n × n adjacency matrix for currency exchange rates
The output: whether there is arbitrage in the system, and if so, give the
currency sequence v0, v1, v2, ..., vk−1 for which rv0v1 ×rv1v2 ×...×rvk−1v0 >
1.
Instructions: Some extra details on how the tasks can be achieved and what
are expected.
• Currency Exchange Graph representation and Test Cases generation.
– Create at least two currency tables such as Table 1 and convert
them into Currency Exchange Graphs with negative logarithm as
test cases.
From/To A B C
A 1 0.651 0.581
B 1.531 1 0.952
C 1.711 1.049 1
Table 1: Sample exchange rates
– Gather real-world currency exchange rates (can include digital currencies). You can use APIs like exchangeratesapi.io or other financial
data services. Convert these exchange rates to a graph representation.
• Task: Add functionality to not only detect the presence of an arbitrage
cycle but also to retrieve and print the cycle. This will need the predecessor
info for each node when computing the shortest path associated with the
recurrence:
dk+1(u) = min{dk(u), min{dk(v) + w(v, u) | (v, u) ∈ E}}
• Any programming languages can be used.
• This is a group work by 3-4 students.
• Submission Guidelines:
The submission shall include the following in a zip file with student ID(s)
– A code file(s).
– A report detailing (1) the program design to achieve the task; and (2)
findings, including any identified arbitrage opportunities, potential
gains, and sample inputs used for testing, alongside expected and
observed outputs (screenshots).
– A small video showing the working of your program.
2
The report should include student name(s), ID(s) and signature(s). In a
group of 3-4 students, just nominate one student to do the submission via
Canvas.
• Marking Guides:
– Pass with distinction (>= 80%): All functionalities achieved, code
well-commented, the report is clear and detailed.
– Pass with merit (>= 65% and < 80%): Majority of the required
functionalities are implemented with few minor issues. Adequate
commenting in the code but might lack in some areas. The report
provides a basic explanation but might lack clarity in some sections.
– Pass (>= 50% and < 65%): Basic functionalities are present, but
some might be flawed or missing. Minimal commenting in the code,
making certain parts hard to understand. The report provides a basic
explanation but might lack clarity in some sections.
– Not pass (< 50%): Significant portions of the required functionalities
are missing or flawed. Code is poorly commented, making it difficult
to understand. The report is unclear, too brief, or missing major
sections.
3