Example #1
0
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)
Example #2
0
    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,