ZnJvbSBncmFwaHZpeiBpbXBvcnQgRGlncmFwaAoKIyDliJvlu7rkuIDkuKrmnInlkJHlm77lr7nosaEKZG90ID0gRGlncmFwaChjb21tZW50PSfnianmtYHku5PlupPlu7rorr7lhrPnrZbmoJEnLCBub2RlX2F0dHI9eydmb250bmFtZSc6ICdXZW5RdWFuWWkgWmVuIEhlaSd9LCBlZGdlX2F0dHI9eydmb250bmFtZSc6ICdXZW5RdWFuWWkgWmVuIEhlaSd9KQpkb3QuYXR0cihyYW5rZGlyPSdUQicsIGRwaT0nMzAwJykKCiMg5a6a5LmJ6IqC54K5CmRvdC5ub2RlKCdBJywgJ+WGs+etlu+8mumAieaLqeS7k+W6k+W7uuiuvuaWueahiCcpCmRvdC5ub2RlKCdCJywgJ+aWueahiDHvvJrmlrDlu7rlpKfku5PlupMnKQpkb3Qubm9kZSgnQycsICfmlrnmoYgy77ya5paw5bu65bCP5LuT5bqTJykKZG90Lm5vZGUoJ0QnLCAn5pa55qGIM++8muWFiOW7uuWwj+S7k+W6kycpCmRvdC5ub2RlKCdFJywgJ+mcgOaxgue0p+S/jyAoUD0wLjcpJykKZG90Lm5vZGUoJ0YnLCAn6ZyA5rGC5L2O5bylIChQPTAuMyknKQpkb3Qubm9kZSgnRycsICfpnIDmsYLntKfkv48gKFA9MC43KScpCmRvdC5ub2RlKCdIJywgJ+mcgOaxguS9juW8pSAoUD0wLjMpJykKZG90Lm5vZGUoJ0knLCAn6ZyA5rGC57Sn5L+PIChQPTAuNyknKQpkb3Qubm9kZSgnSicsICfpnIDmsYLkvY7lvKUgKFA9MC4zKScpCmRvdC5ub2RlKCdLJywgJzPlubTlkI7lhrPnrZbvvJrmmK/lkKbmianlu7onKQpkb3Qubm9kZSgnTCcsICfmianlu7pcbui/veWKoOaKlei1hDIwMOS4h+WFgycpCmRvdC5ub2RlKCdNJywgJ+S4jeaJqeW7uicpCmRvdC5ub2RlKCdOJywgJ+aAu+iOt+WIqTEwMDDkuIflhYNcbuaKlei1hDMwMOS4h+WFgycpCmRvdC5ub2RlKCdPJywgJ+aAu+S6j+aNnzIwMOS4h+WFg1xu5oqV6LWEMzAw5LiH5YWDJykKZG90Lm5vZGUoJ1AnLCAn5oC76I635YipNDAw5LiH5YWDXG7mipXotYQxNDDkuIflhYMnKQpkb3Qubm9kZSgnUScsICfmgLvojrfliKkzMDDkuIflhYNcbuaKlei1hDE0MOS4h+WFgycpCmRvdC5ub2RlKCdSJywgJ+WJjTPlubTmgLvojrfliKkxMjDkuIflhYNcbuaKlei1hDE0MOS4h+WFgycpCmRvdC5ub2RlKCdTJywgJ+aAu+iOt+WIqTMwMOS4h+WFg1xu5oqV6LWEMTQw5LiH5YWDJykKZG90Lm5vZGUoJ1QnLCAn5ZCON+W5tOWHgOiOt+WIqTQ2NeS4h+WFgycpCmRvdC5ub2RlKCdVJywgJ+WQjjflubTmgLvojrfliKkyODDkuIflhYMnKQoKIyDov57mjqXoioLngrkKZG90LmVkZ2UoJ0EnLCAnQicpCmRvdC5lZGdlKCdBJywgJ0MnKQpkb3QuZWRnZSgnQScsICdEJykKZG90LmVkZ2UoJ0InLCAnRScpCmRvdC5lZGdlKCdCJywgJ0YnKQpkb3QuZWRnZSgnQycsICdHJykKZG90LmVkZ2UoJ0MnLCAnSCcpCmRvdC5lZGdlKCdEJywgJ0knKQpkb3QuZWRnZSgnRCcsICdKJykKZG90LmVkZ2UoJ0knLCAnSycpCmRvdC5lZGdlKCdLJywgJ0wnKQpkb3QuZWRnZSgnSycsICdNJykKZG90LmVkZ2UoJ0UnLCAnTicpCmRvdC5lZGdlKCdGJywgJ08nKQpkb3QuZWRnZSgnRycsICdQJykKZG90LmVkZ2UoJ0gnLCAnUScpCmRvdC5lZGdlKCdKJywgJ1MnKQpkb3QuZWRnZSgnTCcsICdUJykKZG90LmVkZ2UoJ00nLCAnVScpCgojIOa4suafk+WbvuW9ogpkb3QucmVuZGVyKCdsb2dpc3RpY3NfZGVjaXNpb25fdHJlZScsIHZpZXc9VHJ1ZSwgZm9ybWF0PSdwbmcnKQ==
from graphviz import Digraph
# 创建一个有向图对象
dot = Digraph(comment='物流仓库建设决策树', node_attr={'fontname': 'WenQuanYi Zen Hei'}, edge_attr={'fontname': 'WenQuanYi Zen Hei'})
dot.attr(rankdir='TB', dpi='300')
# 定义节点
dot.node('A', '决策:选择仓库建设方案')
dot.node('B', '方案1:新建大仓库')
dot.node('C', '方案2:新建小仓库')
dot.node('D', '方案3:先建小仓库')
dot.node('E', '需求紧俏 (P=0.7)')
dot.node('F', '需求低弥 (P=0.3)')
dot.node('G', '需求紧俏 (P=0.7)')
dot.node('H', '需求低弥 (P=0.3)')
dot.node('I', '需求紧俏 (P=0.7)')
dot.node('J', '需求低弥 (P=0.3)')
dot.node('K', '3年后决策:是否扩建')
dot.node('L', '扩建\n追加投资200万元')
dot.node('M', '不扩建')
dot.node('N', '总获利1000万元\n投资300万元')
dot.node('O', '总亏损200万元\n投资300万元')
dot.node('P', '总获利400万元\n投资140万元')
dot.node('Q', '总获利300万元\n投资140万元')
dot.node('R', '前3年总获利120万元\n投资140万元')
dot.node('S', '总获利300万元\n投资140万元')
dot.node('T', '后7年净获利465万元')
dot.node('U', '后7年总获利280万元')
# 连接节点
dot.edge('A', 'B')
dot.edge('A', 'C')
dot.edge('A', 'D')
dot.edge('B', 'E')
dot.edge('B', 'F')
dot.edge('C', 'G')
dot.edge('C', 'H')
dot.edge('D', 'I')
dot.edge('D', 'J')
dot.edge('I', 'K')
dot.edge('K', 'L')
dot.edge('K', 'M')
dot.edge('E', 'N')
dot.edge('F', 'O')
dot.edge('G', 'P')
dot.edge('H', 'Q')
dot.edge('J', 'S')
dot.edge('L', 'T')
dot.edge('M', 'U')
# 渲染图形
dot.render('logistics_decision_tree', view=True, format='png')