我有以下代码:
import json, urllib2, sys, math
import networkx as nx
def grab_files(url):
edges = { "USD_JPY": "88.3656587", "USD_USD": "1.0000000", "JPY_EUR": "0.0086312", "BTC_USD": "123.7747778", "JPY_BTC": "0.0000922", "USD_EUR": "0.6708991", "EUR_USD": "1.2491360", "EUR_JPY": "127.9840248", "JPY_USD": "0.0110954", "BTC_BTC": "1.0000000", "EUR_BTC": "0.0109364", "BTC_JPY": "12670.3554644", "JPY_JPY": "1.0000000", "BTC_EUR": "91.2994188", "EUR_EUR": "1.0000000", "USD_BTC": "0.0071600" }
try:
res = edges
except Exception, e:
print >>sys.stderr, "Error getting rates:", e
sys.exit(1)
return res
def parse_point(t):
tn = t[0].split("_")
return (tn[0], tn[1], -1.0 * math.log(float(t[1])))
def build_graph(parsed_points):
dg = nx.DiGraph()
dg.add_weighted_edges_from(parsed_points)
return dg
def find_path(digraph, start="USD"):
path = nx.bellman_ford(digraph, start, return_negative_cycle=True)
return path
def output_path(path, g, start="USD"):
visited = set(start)
tot=1.0
pred = path[start]
x = start
while pred not in visited:
print pred, "-->", x, math.exp(-g[pred][x]['weight'])
tot*=math.exp(-g[pred][x]['weight'])
visited.add(pred)
x = pred
pred = path[pred]
tot *= math.exp(-g[start][x]['weight'])
print start, "-->", x, math.exp(-g[start][x]['weight'])
print "Total:", tot
if tot < 1.0:
print "Note: no arbitrage opportunity detected."
def main():
obj = grab_files()
parsed_points = map(parse_point, obj.items())
dg = build_graph(parsed_points)
path = find_path(dg)
output_path(path, dg)
if __name__ == "__main__":
main()
我有一个问题path = nx.bellman_ford(digraph, start, return_negative_cycle=True)
这是错误:
回溯(最后一次调用):文件“arb.py”,第 53 行,在 main() 文件“arb.py”,第 49 行,在主路径 = find_path(dg) 文件“arb.py”,第 24 行,在 find_path
路径 = nx.bellman_ford(有向图,开始,return_negative_cycle=True)
据我了解,这是正确的语法,所以我不太确定出了什么问题。
任何帮助,将不胜感激。