OptHub

都市シミュレーションを用いた経済施策問題

2021年 進化計算コンペの問題
都市シミュレーションを用いた経済施策問題

Input / Output

When submitting a solution to a match, please make sure to meet the following conditions.

入力フォーマット

プレイヤーは以下のプロパティをもつJSONオブジェクトを入力します.

プロパティ 説明
query string シミュレーション・プログラム syn_pop.py の第1引数
payment float シミュレーション・プログラム syn_pop.py の第2引数
正しい例
{"query": "family_type_id == [0,3,4,60,70,80] and role_household_type_id == [0,1,21,30,31] and industry_type_id == [-1,10,20,30,50,60,80,90,100,160,170,200] and employment_type_id == [-1,20,30] and company_size_id == [-1,5,10]", "payment": 9}

queryにはシミュレーション・プログラムの第1引数を,paymentには第2引数を設定してください.

{
  "query":   "family_type_id == [0,3,4,60,70,80] and role_household_type_id == [0,1,21,30,31] and industry_type_id == [-1,10,20,30,50,60,80,90,100,160,170,200] and employment_type_id == [-1,20,30] and company_size_id == [-1,5,10]",
  "payment": 9
}

キーや値の前後には改行やスペースを入れることができます.評価値に影響はありません.

{
  "query":   "family_type_id == [0,3,4,60,70,80] and role_household_type_id == [0,1,21,30,31] and industry_type_id == [-1,10,20,30,50,60,80,90,100,160,170,200] and employment_type_id == [-1,20,30] and company_size_id == [-1,5,10]",
  "payment": 7.2
}

paymentには小数が使用できます.ただし指数表記(7.2e+1など)は使用できませんのでご注意ください.

誤った例
{
  'query': 'family_type_id == [0,3,4,60,70,80] and role_household_type_id == [0,1,21,30,31] and industry_type_id == [-1,10,20,30,50,60,80,90,100,160,170,200] and employment_type_id == [-1,20,30] and company_size_id == [-1,5,10]',
  'payment': 9
}

シングルクォーテーションは使えません.ダブルクォーテーションで囲ってください.

{
  "query": "family_type_id == [0,3,4,60,70,80] and role_household_type_id == [0,1,21,30,31] and industry_type_id == [-1,10,20,30,50,60,80,90,100,160,170,200] and employment_type_id == [-1,20,30] and company_size_id == [-1,5,10]",
  "payment": "9"
}

paymentの値をクォートしてはいけません.

{
  "query": "family_type_id == [0,3,4,60,70,80] and role_household_type_id == [0,1,21,30,31] and industry_type_id == [-1,10,20,30,50,60,80,90,100,160,170,200] and employment_type_id == [-1,20,30] and company_size_id == [-1,5,10]",
  "payment": 9,
}

末尾に余分なコンマを付けてはいけません.

出力フォーマット

プレイヤーは以下のプロパティをもつJSONオブジェクトを受け取ります.

プロパティ 説明
objective float| float[2] 目的関数値.SYNPOP_FUNC=[1]の場合は$f_1$の値,SYNPOP_FUNC=[2]の場合は$f_2$の値,SYNPOP_FUNC=[1,2]の場合は$f_1,f_2$の値.いずれも最小化問題.
constraint float[28] 制約関数値.最初の要素は支給制約.残りの27要素はシミュレーションの各試行において余った予算に-1を掛けた値(例:10万円余ったときは-10.0).すべての値が0.0以下ならば実行可能解.正の値が1つ以上あれば実行不可能解.
info float[27] | float[2][27] シミュレーション27試行それぞれの経済指標値(参考情報).SYNPOP_FUNC=[1]の場合は$F_1$の値,SYNPOP_FUNC=[2]の場合は$F_2$の値,SYNPOP_FUNC=[1,2]の場合は$F_1,F_2$の値の2次元配列.問題を解く際にソルバなどで利用できる.

配布したシミュレーション・プログラムの出力とは以下の点が異なることに注意してください.

  • 目的関数値としては,シミュレーション27試行の平均値のみが返る.
  • 各試行の値は参考情報.
  • 制約関数値はすべての値が0以下のとき実行可能.正の値が1つ以上あれば実行不可能.
  • 制約関数の最初の要素は実行可能ならば0.0(シミュレーション・プログラムのTrueに相当),実行不可能ならば1.0(シミュレーション・プログラムのFalseに相当).

単目的の場合.constraint[i] <= 0なので実行可能解.objective == mean(info)が成り立つ.

{
  "objective": 0.1,
  "constraint": [0.0, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1],
  "info": [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
}

多目的の場合.constraint[i] <= 0なので実行可能解.objective[i] == mean(info[i])が成り立つ.

{
  "objective": [0.1, 0.2],
  "constraint": [0.0, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1, -0.1],
  "info": [
    [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1],
    [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]
  ]
}