in source/src/molecule-unfolding/utility/QMUQUBO.py [0:0]
def _build_qubo_pre_calc(self, mol_data, M, D, A, var, rb_var_map, var_rb_map, theta_option):
# initial constraint
hubo_constraints = {}
# for m in range(M):
# for d1 in range(D):
# var_1 = var[str(m+1)][str(d1+1)]
# for d2 in range(D):
# var_2 = var[str(m+1)][str(d2+1)]
# if (var_2, var_1) in hubo_constraints.keys():
# hubo_constraints[(var_2, var_1)] = hubo_constraints[(
# var_2, var_1)] + A
# elif var_1 == var_2:
# hubo_constraints[(var_1, var_1)] = -A
# else:
# hubo_constraints[(var_1, var_2)] = A
def update_constraint(ris, hubo_constraints):
for d1 in range(D):
var_1 = var[rb_var_map[ris]][str(d1+1)]
for d2 in range(D):
var_2 = var[rb_var_map[ris]][str(d2+1)]
if (var_2, var_1) in hubo_constraints.keys():
hubo_constraints[(var_2, var_1)] = hubo_constraints[(
var_2, var_1)] + A
elif var_1 == var_2:
hubo_constraints[(var_1, var_1)] = -A
else:
hubo_constraints[(var_1, var_2)] = A
# update distance term
hubo_distances = {}
def update_hubo(torsion_group, up_list):
if len(torsion_group) == 1:
# print(tor_group)
for d in range(D):
final_list = up_list + \
[var[rb_var_map[torsion_group[0]]][str(d+1)]]
# distance
final_list_name = []
if len(final_list) == 1:
final_list_name = final_list + final_list
else:
final_list_name = final_list
# hubo_distances[tuple(final_list_name)] = -1
distance = -atom_distance_func(tuple(final_list), mol_data, var_rb_map, theta_option, M)
hubo_distances[tuple(final_list_name)] = distance
logging.debug(f"final list {final_list} with distance {distance}")
else:
for d in range(D):
final_list = up_list + \
[var[rb_var_map[torsion_group[0]]][str(d+1)]]
update_hubo(torsion_group[1:], final_list)
for ris in mol_data.bond_graph.sort_ris_data[str(M)].keys():
start = time.time()
logging.debug(f"ris group {ris} ")
end = time.time()
torsion_group = ris.split(",")
if len(torsion_group) == 1:
# update constraint
update_constraint(ris, hubo_constraints)
logging.info(torsion_group)
# update hubo terms
update_hubo(torsion_group, [])
logging.debug(
f"elapsed time for torsion group {ris} : {(end-start)/60} min")
return hubo_constraints, hubo_distances