issp-center-dev / PHYSBO

PHYSBO -- optimization tools for PHYsics based on Bayesian Optimization
https://www.pasums.issp.u-tokyo.ac.jp/physbo/en
68 stars 15 forks source link

writeメソッドにおけるnp.take()のエラー #57

Open yuki-asano opened 1 month ago

yuki-asano commented 1 month ago

概要

physboをinteractiveモードで実行しているのですが、 最後のactionを評価して結果をwriteする際に以下のエラーが生じるように思います。 再現コードを添付しておりますので、ご確認いただけますと幸いです。

import csv import physbo import pandas as pd import numpy as np

def get_data_from_result_list(index): with open('./results.csv') as f: reader = csv.reader(f) l = [row for row in reader]

return float(l[index+1][0])

def main():

dir setting

candidates_path  = './candidates.csv'

# load_dataset
data = pd.read_csv(candidates_path)
X = data.iloc[:,:-1].to_numpy()
actions = list(data[data["y"] < np.inf].index)

# generate policy
policy = physbo.search.discrete.policy(X)

# search
for i in range(20):
    next_action = policy.random_search(max_num_probes=1)
    print(next_action[0])
    result = get_data_from_result_list(next_action[0])
    print(result)
    policy.write(next_action, result)
    physbo.search.utility.show_search_results(policy.history, 10)
    print(policy.actions)

if name == 'main': main()


### 修正案
- コード該当部
https://github.com/issp-center-dev/PHYSBO/blob/master/physbo/search/discrete/policy.py#L141-L145

- 案
残actionのリストが空(最後の一つの実行時)の場合は、np.take()をスキップする

if self.actions != []: # skip this for the last action
local_index = np.searchsorted(self.actions, action) local_index = local_index[ np.take(self.actions, local_index, mode="clip") == action ] self.actions = self._delete_actions(local_index)



ご検討よろしくお願いいたします。
k-yoshimi commented 4 weeks ago

バグと改善案の提案をありがとうございます。 最終候補がなくなった場合の挙動について、修正するようにします。 修正後、issueで該当箇所を記載しますので、それまで少々お待ちいただければと思います。 よろしくお願いします。

yomichi commented 3 weeks ago

なおしました。 (#58) develop ブランチにはいっています。

yuki-asano commented 3 weeks ago

ご対応ありがとうございます。