def model_from_pyqubo_model(): print("\n=== from pyqubo compiled model ===") model = sawatabi.model.LogicalModel(mtype="qubo") x = model.variables("x", shape=(4, 2)) y = model.variables("y", shape=(4, 2)) sum_x = sum(x[i, 0] for i in range(4)) sum_y = sum(y[i, 0] for i in range(4)) hamiltonian = Placeholder("A") * (sum_x - sum_y)**2 + 10.0 pyqubo_model = hamiltonian.compile() model.from_pyqubo(pyqubo_model) print("\nInteractions are set with pyqubo expression.") _print_utf8(model) print("\nCheck also the physical model after placeholder resolves.") physical = model.to_physical({"A": 2.0}) _print_utf8(physical)
def define_model(self): ''' pyqubo.Modelインスタンス作成。モデル作成結果はself.modelに格納 H1(距離 目的関数)、H2,H3(都市、順序のワンホット制約) parameters ----- なし returns ----- なし ''' city_num = self.size #変数定義 x = Array.create('x', shape=(city_num, city_num), vartype="BINARY") #距離のペナルティ H1 = 0 #i番目に都市j、i+1番目に都市kを訪れる for i, j in product(range(city_num), range(city_num)): for k in range(city_num): H1 += self.dist(j, k) * x[i][j] * x[(i + 1) % city_num][k] #ある時刻には訪れる都市は1つだけ H2 = 0 for i in range(city_num): H2 += Constraint((Sum(0, city_num, lambda j: x[i][j]) - 1)**2, label=f"Constraint one hot for time{i}") #ある都市に訪れるのは1度だけ H3 = 0 for i in range(city_num): H3 += Constraint((Sum(0, city_num, lambda j: x[j][i]) - 1)**2, label=f"Constraint one hot for city {i}") H = Placeholder("H1") * H1 + H2 + H3 #モデル作成 self.model = H.compile()
#エージェントの利用可能資源量を超えない H2 = Sum( 0, n, lambda i: Constraint( Sum(0, m, lambda j: x[ (i, j)] * a[i, j] + y[i] - b[i])**2, f"Agent Resource {i}")) #H2 = Sum(0,n,lambda i: Sum(0,m,lambda j: x[(i,j)]*a[i,j] - b[i])**2) #全ての仕事をエージェントに割り振る H3 = Sum(0, m, lambda j: Constraint(Sum(0, n, lambda i: x[i][j] - 1)**2, f"Job{j}")) H = Placeholder("balancer1") * H1 + Placeholder( "balancer2") * H2 + Placeholder("balancer3") * H3 model = H.compile() #パラメータ探索 study = optuna.create_study(storage='sqlite:///example.db', study_name=f"m{m}n{n}_DW2000Q", load_if_exists=True) study.optimize(objective, n_trials=200) b1 = study.best_params["b1"] b2 = study.best_params["b2"] b3 = study.best_params["b3"] def_dict = { "balancer1": b1, "balancer2": b2, "balancer3": b3,