内核死于bw2analyzer.traverse_tagged_databases

时间:2018-12-06 19:16:58

标签: python-3.x brightway

根据this answer的建议,使用private static List<News> extractFeatureFromJson(String newsJSON) { if (TextUtils.isEmpty( newsJSON )) { return null; } List<News> newsall = new ArrayList<>(); try { JSONObject data = new JSONObject(newsJSON); JSONObject response = data.getJSONObject(RESPONSE); JSONArray results = response.getJSONArray(ARTICLES); for (int i = 0; i < results.length(); i++) { JSONObject obj = results.getJSONObject(i); String webTitle = obj.getJSONArray( ARTICLES ).getJSONObject( 0 ).getString( WEB_TITLE ); String webUrl = obj.getJSONArray( ARTICLES ).getJSONObject( 0 ).getString( WEB_URL ); News news = new News(webTitle, webUrl); newsall.add(news); } } catch (JSONException e) { Log.e("QueryUtils", "Problem parsing the news JSON results", e); } return newsall; } 函数时遇到一些问题。我想在标签上应用bw2analyzer.traverse_tagged_databases函数。我确保我正在评估的活动(以下为bw2analyzer.traverse_tagged_databases)具有标签,然后某些输入交换具有标签(但并非全部),并且输入交换的某些输入交换具有标签(不是所有的人)。这是我的工作(省略了一些定义行):

my_act

当我这样做时,内核死亡(确切消息:import bw2analyzer as bw2analyzer ipcc2013 = ('IPCC 2013', 'climate change', 'GWP 100a') fu = {my_act:1} lca_calc = bw.LCA(fu,ipcc2013) lca_calc.lci() lca_calc.lcia() result, tree = bw2analyzer.traverse_tagged_databases(fu, ipcc2013, label='tag',default_tag='other') 。我正在使用Spyder v3.3.1,brightway2 v2.3,bw2analyzer v0.9.4),然后它会无限期地运行。我是否正确使用该功能?我缺少什么?那对你有用吗?谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我找到了使bw2analyzer.traverse_tagged_databases函数在大型数据库(例如ecoinvent)上使用时可以起作用的解决方案。我通过实现计算深度(即应用递归函数的最大深度)并在达到该深度时交替显示结果来重写tagged.recurse_tagged_database函数。这是我的代码(由于我仅使用一个数据库,因此从原始函数中删除了几行):

def recurse_tagged_database(activity, amount, method_dict, lca, label, default_tag, secondary_tags=[],product_system_depth=5):
    from bw2data import get_activity
    if isinstance(activity, tuple):
        activity = get_activity(activity)
    inputs = list(activity.technosphere())
    if(product_system_depth > 0):
        return {
            'activity': activity,
            'amount': amount,
            'tag': activity.get(label) or default_tag,
            'secondary_tags':[activity.get(t[0]) or t[1] for t in secondary_tags],
            'impact': 0,
            'biosphere': [{
                'amount': exc['amount'] * amount,
                'impact': exc['amount'] * amount * method_dict.get(exc['input'], 0),
                'tag': exc.get(label) or activity.get(label) or default_tag,
                'secondary_tags':[exc.get(t[0]) or activity.get(t[0]) or t[1] for t in secondary_tags]
            } for exc in activity.biosphere()],
            'technosphere': [recurse_tagged_database(exc.input, exc['amount'] * amount,
                                                     method_dict, lca, label,exc.get(label) or activity.get(label) or default_tag, secondary_tags,product_system_depth=product_system_depth-1)
                             for exc in inputs]
        }
    else:
        return {
            'activity': activity,
            'amount': amount,
            'tag': activity.get(label) or default_tag,
            'secondary_tags':[activity.get(t[0]) or t[1] for t in secondary_tags],
            'impact': redo_lca_score(lca,{activity:amount}),
            'biosphere': [],
            'technosphere': []
        }

评论:

  • 在将递归函数应用于default_tag时,我更改了exc.get(label) or activity.get(label) or default_tag输入。实际上,就我而言,如果没有标签,我希望默认情况下将交易所的影响与父活动的标签相关联。
  • 就我而言,深度为5足以得到我想要的。这已经需要一些时间。