簡體   English   中英

制定決策樹

[英]Making a decision tree

我有十個系統,A,B,C,...,J。每個系統都可以啟動或關閉。 例如,如果系統A,B,D和J處於關閉狀態,其余部分處於啟動狀態,那么我要采取措施X。如果系統C,D和H處於關閉狀態,則其余部分處於啟動狀態,那么我要采取措施動作Y。如果系統A,E,F,H和I處於關閉狀態,其余部分處於上升狀態,則我要執行動作Z。

我想編寫一個可以打印各種組合的程序(我相信有10個系統,每個系統可以向上或向下都有100個組合)。

到目前為止,我有:

import itertools
status_list = (
    "Up",
    "Down",
)
component_list = (
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "G",
    "I",
    "J",
)
combinations = itertools.product(component_list, status_list)

如果您不介意使用二進制表示形式,則可以使用0表示Up ,使用1表示Down

我們的值范圍從010^2-1

1023 01023 ,或者

00000000001111111111

因此我們可以從0循環到1023,以10位二進制格式輸出數字:

for x in range(2**10):
    print '{0:010b}'.format(x)

輸出:

0000000000
0000000001
0000000010
0000000011
0000000100
0000000101
0000000110
...etc

如果你想更大膽的嘗試並打印updown的,而不是01 ,您可以檢查數字一個接一個和轉換:

for x in range(2**10):

    #Iterate over each character c in the binary number x
    #Convert c to an int
    #Look up the value in status_list by taking c mod length of status list
    print(" ".join(status_list[int(c)%len(status_list)] for c in '{0:010b}'.format(x)))

輸出:

Up Up Up Up Up Up Up Up Up Up
Up Up Up Up Up Up Up Up Up Down
Up Up Up Up Up Up Up Up Down Up
Up Up Up Up Up Up Up Up Down Down

您可以使用itertools.product打印出UpDown每種可能組合:

import itertools
components = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
statuses = ['Up', 'Down']

for state in itertools.product(statuses, repeat=len(components)):
    for c,s in zip(components, state):
        print '{}:{}'.format(c,s),
    print

產生如下輸出:

A:Up B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Up
A:Up B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Down
...
A:Up B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Up
A:Up B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Down
A:Down B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Up
A:Down B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Down
...
A:Down B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Up
A:Down B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Down

它很好地處理了可變數量的組件或狀態(例如,您可以使states = ['Up', 'Down', 'Unknown']並獲得3 ^ 10 = 59049的輸出)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM