0

我有以下代码:

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)

据我了解,这是正确的语法,所以我不太确定出了什么问题。

任何帮助,将不胜感激。

4

0 回答 0