OptHub

難易度と面白さを考慮したナンプレの自動作成問題

2024年 進化計算コンペ 問題

number-place

難易度と面白さを考慮したナンプレの自動作成問題

入出力

競技に対して解を送信する際に以下の条件を満たすように送信してください。

入力

形式

この問題で送信する解は、各要素が0から9の整数の81次元配列である。配列の各要素はナンプレの各マスに対応しており、左上がインデックスが0、右上のインデックスが8、左下のインデックスが71、右下のインデックスが80になるように対応しています。すなわち、左上から右側にインデックスが上昇して、一番右端に到達した場合は1つ下の段に移動する形でインデックスが振られています。配列の要素の数字は、0は空マス、1から9はそれぞれの数字がマスが入っていることを意味する。

注意点

また、実際のナンプレの制作現場では、数字を入れるマスを先に決めたいケースが多い。今回の問題設定も、現場の運用に合わせて数字を格納できる場所が限られている。具体的には、環境変数HINT_PATTERNに基づいてコントロールされる。HINT_PATTERNの要素が0の場合、それに対応するマスには数字は格納できず、要素が1の場合、それに対応するマスには数字を必ず格納する必要がある。

具体例

以下に、HINT_PATTERNと送信する送信する解の具体例を示す。要素に0が格納されている場所がHINT_PATTERNと送信する解で一致している点に注意されたい。

# HINT_PATTERN
[1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1]

# 送信する解
[8, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 6, 8, 0, 7, 4, 0, 0, 0, 4, 0, 0, 6, 0, 0, 2, 0, 0, 5, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 8, 0, 0, 9, 0, 0, 8, 0, 0, 6, 0, 0, 0, 1, 7, 0, 2, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 3]

出力

本問題の評価結果は、目的関数の値objective、実行可能性feasible、エラーerrorが返却される。目的関数objectiveの値はfeasibleTureの場合のみ返却される。サーバーでエラーが発生した場合は、目的関数の値objective、実行可能性feasible返却されず、評価回数としてはカウントされない。

目的関数

目的関数の値objectiveは、多目的問題の場合(環境変数MULTI_OBJECTIVETrueの場合)は2次元のベクトルである。1次元目は緊張感を表すfloat型の値、2次元目は連鎖長を表すfloat型の値である。単目的問題の場合(環境変数MULTI_OBJECTIVETrueの場合)は、緊張感と連鎖長を環境変数OBJECTIVE_WEIGHTに基づいて加重和をとった値(float型)を目的関数の値として利用する。

実行可能性

ユーザが送信した解は、以下の観点で実行可能性が判定される。実行可能性feasibleは、以下の条件を1つでも満たす場合はfalse、全て満たさない場合はtrueとなる。

  • ヒントの位置が環境変数HINT_PATTERNの指定と異なる場合
  • ナンプレのルールに基づいて解くことができない
  • ルールに基づいて解くことができるが、重複解が存在する

エラー

期待しない形式で解を送信した場合やサーバー内部で予期せぬエラーが発生した場合には、エラーerrorが返却される。自分が送信した解が指定の形式になっているかどうかを確認し、送信した解に問題がない場合はコンペの管理者に問い合わせをしてください。

具体例

例1:多目的問題で実行可能解を送信した場合

{ objective: [0.3154, 0.3619], feasible: true }

例2:単目的問題で実行可能解を送信した場合

{ objective: 0.5672, feasible: true }

例3:多目的問題で実行不可能解を送信した場合

{ feasible: false }

例4:多目的問題で実行不可能解を送信した場合

{ feasible: false }