Поиск значений связей внутри замкнутой системы

Данный код реализует поиск связей между узлами (Альфа, Бета, и т.д.) на основании различных параметров, задача состоит в том, чтоб найти значения этих связей.

Условия:

  1. Сумма значений входящих связей узла равна параметру 'inturn'.
  2. Сумма значений исходящих связей узла равна параметру 'outurn'.
  3. Изначально все значения связей неизвестны.
import random
from collections import Counter

comp_list = ['Альфа', 'Бета', 'Гамма', 'Дельта', 'Эпсилон', 'Дзета', 'Эта', 'Тета']  
linkMin = [2, 2, 2, 2, 2, 2, 2, 2]  
linkMax = [4, 4, 4, 4, 4, 4, 4, 4]  
out_linkran = [random.randint(2, 4), random.randint(2, 4), random.randint(2, 4),
               random.randint(2, 4), random.randint(2, 4), random.randint(2, 4),
               random.randint(2, 4), random.randint(2, 4)
               ]
inc_linkran = [random.randint(2, 3), random.randint(2, 3), random.randint(2, 3),
               random.randint(2, 3), random.randint(2, 3), random.randint(2, 3),
               random.randint(2, 3), random.randint(2, 3)
               ]

i_v = [48989420]
f_v = [48989420]
i_t = [255258863]
o_t = [255258863]
i_v_list = [5000000, 1000000, 8000000,
            15000000, 1900000, 49420,
            7840000, 10200000
            ]  
f_v_list = [2500, 7800000, 15000000,
            4700, 9378000, 6940000,
            9863420, 800
            ]  
i_t_list = [2082292, 41717791, 57455285,
            7886851, 39717241, 31947667,
            35374341, 39077395
            ]  
o_t_list = [7079792, 34917791, 50455285,
            22882151, 32239241, 25057087,
            33350921, 49276595
            ]  
cod_list = [5445, 4205, 5405, 5405, 2464, 9204, 9204, 2464]  # список кодов

# списки классов организаций
alpha_cls = [432100, 192000, 421100, 932990]
beta_cls = [521000, 466900, 842509, 711210]
gamma_cls = [521000, 421100, 842509, 711210]
delta_cls = [0, 412000, 711210, 932990]
epsilon_cls = [467100, 421100, 521000, 711210]
zeta_cls = [192000, 466900, 711210]
eta_cls = [842509, 421100, 521000, 932990]
theta_cls = [421100, 466900, 711210, 932990]

alpha = {'name': comp_list[0], 'code': cod_list[0], 'cls': alpha_cls,
         'lnkMin': linkMin[0], 'lnkMax': linkMax[0], 'inval': i_v_list[0],
         'finval': f_v_list[0], 'inturn': i_t_list[0], 'outurn': o_t_list[0],
         }
beta = {'name': comp_list[1], 'code': cod_list[1], 'cls': beta_cls,
        'lnkMin': linkMin[1], 'lnkMax': linkMax[1], 'inval': i_v_list[1],
        'finval': f_v_list[1], 'inturn': i_t_list[1], 'outurn': o_t_list[1],
        }
gamma = {'name': comp_list[2], 'code': cod_list[2], 'cls': gamma_cls,
         'lnkMin': linkMin[2], 'lnkMax': linkMax[2], 'inval': i_v_list[2],
         'finval': f_v_list[2], 'inturn': i_t_list[2], 'outurn': o_t_list[2],
         }
delta = {'name': comp_list[3], 'code': cod_list[3], 'cls': delta_cls,
         'lnkMin': linkMin[3], 'lnkMax': linkMax[3], 'inval': i_v_list[3],
         'finval': f_v_list[3], 'inturn': i_t_list[3], 'outurn': o_t_list[3],
         }
epsilon = {'name': comp_list[4], 'code': cod_list[4], 'cls': epsilon_cls,
           'lnkMin': linkMin[4], 'lnkMax': linkMax[4], 'inval': i_v_list[4],
           'finval': f_v_list[4], 'inturn': i_t_list[4], 'outurn': o_t_list[4],
           }
zeta = {'name': comp_list[5], 'code': cod_list[5], 'cls': zeta_cls,
        'lnkMin': linkMin[5], 'lnkMax': linkMax[5], 'inval': i_v_list[5],
        'finval': f_v_list[5], 'inturn': i_t_list[5], 'outurn': o_t_list[5],
        }
eta = {'name': comp_list[6], 'code': cod_list[6], 'cls': eta_cls,
       'lnkMin': linkMin[6], 'lnkMax': linkMax[6], 'inval': i_v_list[6],
       'finval': f_v_list[6], 'inturn': i_t_list[6], 'outurn': o_t_list[6],
       }
theta = {'name': comp_list[7], 'code': cod_list[7], 'cls': theta_cls,
         'lnkMin': linkMin[7], 'lnkMax': linkMax[7], 'inval': i_v_list[7],
         'finval': f_v_list[7], 'inturn': i_t_list[7], 'outurn': o_t_list[7],
         }

nodes = [alpha, beta, gamma, delta, epsilon, zeta, eta, theta]
random.shuffle(nodes)
links = {key['name']: [] for key in nodes}
incoming_links = {key['name']: [] for key in nodes}
val_incoming_links = []
node_number = 0
i = 0
out_links = []
inc_links = []

for start in nodes:
    for end in nodes:

        cond1 = start['code'] != end['code']
        cond2 = list(set(start['cls']) & set(end['cls']))
        cond3 = start['name'] not in links[end['name']]
        cond4 = len(links[start['name']]) < out_linkran[node_number]

        if cond1 and cond2 and cond3 and cond4:
            # print('Исходящие связи:', start['name'], end['name'])
            links[start['name']].append(end['name'])
            # print('Входящие связи:', end['name'], start['name'])
            incoming_links[end['name']].append(start['name'])
            out_links.append(start['name'])
            inc_links.append(end['name'])
            t = Counter(out_links)
            t2 = Counter(inc_links)

            i += 1

    node_number += 1

t = Counter(out_links)
t2 = Counter(inc_links)
out_alpha_count = t['Альфа']
out_beta_count = t['Бета']
out_gamma_count = t['Гамма']
out_delta_count = t['Дельта']
out_epsilon_count = t['Эпсилон']
out_zeta_count = t['Дзета']
out_eta_count = t['Эта']
out_theta_count = t['Тета']

inc_alpha_count = t2['Альфа']
inc_beta_count = t2['Бета']
inc_gamma_count = t2['Гамма']
inc_delta_count = t2['Дельта']
inc_epsilon_count = t2['Эпсилон']
inc_zeta_count = t2['Дзета']
inc_eta_count = t2['Эта']
inc_theta_count = t2['Тета']

out_links_list = [out_alpha_count, out_beta_count,
                  out_gamma_count, out_delta_count,
                  out_epsilon_count, out_zeta_count,
                  out_eta_count, out_theta_count
                  ]

inc_links_list = [inc_alpha_count,inc_beta_count,
                  inc_gamma_count, inc_delta_count,
                  inc_epsilon_count, inc_zeta_count,
                  inc_eta_count, inc_theta_count
                  ]

print('Количество связей:', i)
print(out_linkran)
print(inc_linkran)
print('Outgoing links:', t)
print('Incoming links:', t2)
print('out', out_links_list)
print('inc', inc_links_list)
print('Исходящие связи:', links)
print('Входящие связи:', incoming_links)

Ответы (0 шт):