2019年4月24日水曜日

Pythonによる制約記述

下図のようにメニューに追加しました。
SC2との互換を取るために前の言語制約はそのまま残しています(deprecated)が、SC3では、Pythonによる言語制約を使ってください。

Pythonの日本語変数
日本語の全てが使える訳ではないようです

とりあえず、不具合が出ると分かっているものは、次のようにプロジェクト読み込み時に修正するようにしました。

SC2SC3 Replaced
制約開始日ー1制約開始日一日前
制約開始日ー2制約開始日二日前
制約開始日ー3制約開始日三日前
制約開始日ー4制約開始日四日前
制約開始日ー5制約開始日五日前
制約開始日ー6制約開始日六日前
制約開始日ー7制約開始日七日前
制約開始日+1制約開始日一日後
制約開始日+2制約開始日二日後
制約開始日+3制約開始日三日後
制約開始日+4制約開始日四日後
制約開始日+5制約開始日五日後
制約開始日+6制約開始日六日後
制約終了日ー1制約終了日一日前
制約終了日ー2制約終了日二日前
制約終了日ー3制約終了日三日前
制約終了日ー4制約終了日四日前
制約終了日ー5制約終了日五日前
制約終了日ー6制約終了日六日前



お決まりのHello World!からです。
import sc3
sc3.print("Hi\n")
<Pythonインタープリタは?>
pythonインタープリタは、制約ソルバ上に組み込まれて(embedded)います。インタープリタのpathは、制約ソルバーと同じパス上にあります。プロジェクトファイル上にはないのでご注意ください。

<制約ソルバーとのインターフェースは?>
python上からは、全てsc3を介してインターフェースされます。sc3は、暗黙moduleでありユーザは実体を見ることはできません。 sc3は、pybind11でバインドしたc++moduleです。
sc3がないと、何もすることは出来ません。従い、まずプログラムの最初に、
import sc3
と書く必要があります。

<コンソールの出力方法は?>
ありません。GUIへの出力は、sc3.print(string,string...) としてください。


実行の様子です。 コンパイルの最初の方で、GUIが設定した集合情報ファイルを生成しています。
(後述)その後、インタープリタの実行に移り、Hiが出力されています。その後、制約の最終コンパイル経てソルバーの実行に移って行きます。



<Pythonの役目>
Pythonの役目は、集合情報ファイルを利用して、ソルバー内の変数に自由にアクセスし、制約を付加することです。GUI設定で、行き届かない部分について、Pythonでプログラムすることになります。

SC2言語とあまり変わるところはないのですが、SC3では、公式にPythonによる制約をサポートします。ハード制約のみならず、ソフト制約もサポートします。一般のユーザが使うことは想定していません。十分にGUIによる制約について慣れている方々を想定します。(プログラム上級の方でも、制約プログラムには、慣れが必要だと思います。)
GUIの全てを置き換えることも理論的には可能ですが、Pythonを使っても骨が折れる作業ですので、小さなシステムを除いてあまり現実的ではないと思います。総じて、GUI制約を補間することが、Pythonの役目になります。

0 件のコメント:

コメントを投稿