Analytica 6 の新機能
Analytica 6.4
1. 識別子の拡張
変数やオブジェクトの名前または識別子に以下が使用できるようになりました:
- 任意の文字数 (以前は 20 文字まででした。)
- 英語以外の文字 (ψ, वेग, 角度, размер など) (以前はタイトルにのみ使用可能で、識別子には使用不可でした。)
- 識別子をバッククォートで囲めば、スペースや括弧を含む任意の文字が使用できます。
例: `Emission reduction ($)`
Preferences ダイアログで、タイトルから自動生成される識別子の最大文字数 (デフォルトでは 20 文字) をコントロールできます。
2. OpenAI ライブラリ
Open AI API ライブラリは、OpenAI のジェネレーティブモデルとのインターフェイスとなる Analytica 関数を提供します。大規模言語モデル (LLM) の柔軟性を活用して、フォーマルなプログラムやモードでは難しいタスクを実行することができます。ChatGPT 3.5、ChatGPT 4、その他多くのモデルから使いたいモデルを選択できます。テキストから画像を生成できます。Open AI API library のページからライブラリをダウンロードできます。使い方は Tutorial on using pre-trained OpenAI language models をご覧ください。LLM の使い方を学ぶのにも最適です。
3. Database ライブラリ
Database ライブラリは、SQL を記述することなく、データベースの検索、更新、データベーステーブルの作成、読み込み、変更、削除を簡単に行うための関数を提供します。Microsoft Access、Microsoft SQL Server、MariaDB、PostgreSQL で動作し、他のデータベースプラットフォームをサポートするように拡張することもできます。
4. テーブルのユーザーインターフェース
- 初回インストール時に “Large text in attributes & tables” (属性とテーブルの大きなテキスト) の環境設定がオンで開始されるようになりました。
- デスクトップ版 Analytica でも、テーブルのセル内の長いテキストがワードラップされるようになりました (ACP では実装済)。
- ワードラップのオン/オフは、セルフォーマットの環境設定 (Alignment タブ)、またはCellAlignment のパラメータで設定できます。
- セルフォーマットの Hybrid アラインメントオプション:
通常、数字は右揃え、テキストは左揃えにします。これはハイブリッドアラインメントの一例です。
デフォルトでは、単一行のテキストは左揃えになっています。以前は単一行テキストは右揃えでしたが、複数行テキストは左揃えでした。
以前のデフォルトに戻したい場合は、Typescript ウィンドウで次のようにタイプしてください:
Sys_CellAlignmentHybridDefault := 19
1 つの表で旧来の動作が必要な場合は、Cell Formats… / Alignment / Horizontal でハイブリッド形式を使用します。ハイブリッドに設定すると、単一行のテキスト、数字、日付のみが右揃えになります。
- ユーザー入力/出力ノード用に、テキスト付きのフラットボタンスタイルが追加されました。
- ショートカット/タスクバーアイコンに白い縁取りが追加され、背景が暗くても見やすくなりました。
5. ノードのクリック
- OnClick はエイリアスとオリジナルを区別します。
以前の OnClick コードでは、Self が常にオリジナルのオブジェクトを参照するため、オリジナルのオブジェクトをクリックしたのか、エイリアスをクリックしたのか区別できませんでした。また、エイリアスは、最初に実行される OnClick とは別の OnClick を持つことができます。
OnClick の内部で使用できる 2 つのローカルが追加されました:
- click_node_obj
クリックされた実際のノードのオブジェクト識別子を含みます。Handle を取得するには、Handle(click_node_obj)
を使用してください。
- click_continue
デフォルトでは、エイリアスの OnClick が最初に実行され、次にオリジナルの OnClick が実行されます (両方に OnClick がある場合)。これに false を代入すると抑制することができます。
6. ビルトイン関数
6.1 シーケンス演算子
m>n
のときのシーケンス演算子 m .. n
の動作が変更されました。Analytica の新しいバージョンがリリースされるたびに、後方互換性を確保するために細心の注意を払っていますので、6.4 以前のモデルを 6.4 にロードしても同じ結果が計算されます (m≤n
の場合は変更ありません)。
以前は、m>n
のときのシーケンス演算子は減少シーケンスを与えていました。
1..0 → [1,0]
{ 以前のリリース }
1..0 → [ ]
{ 6.4 }
この動作は、よくあるバグの原因となります。例えば、下記のようにシーケンス演算子がコレクション内のポジションを反復処理する場合:
For i:=1..Size(L) Do F( Slice( L, i ) )
以前の減少動作では、Size(L) がゼロのとき、この式にバグが発生します。要素なしを反復処理する代わりに、1 番目と 0 番目の要素を反復処理しようとしますが、どちらも存在しません。(位置は 1 から始まるので、0 番目の要素は存在しない)。バージョン 6.4 では、この動作が修正されています。
レガシーモデルの環境設定は、”m>n のとき m..n を減少” するようになりました。レガシーモデル (Analytica 6.3以前のバージョンで最後に保存されたモデル) をロードする際、モデルに m>n が発生する可能性のある m..n インスタンスが 1 つでも含まれていれば、この環境設定を設定し、演算子が古い動作を使用するようにします。バージョン 6.4 のモデルからレガシーライブラリを使用する場合、またはその逆の場合、後方互換性を確保するためにいくつかの追加のトリックを使用します。詳細は Sequence Operator を参照してください。(これは稀ですが) モデルがシーケンスを後戻りさせることに依存していないことを確認したら、このレガシー環境設定をオフにしてください。
6.2 ReadFromURL
ReadFromURL 関数は、RESTful ウェブサービスを作成するために使用されます。この関数の拡張機能は次のとおりです:
- バイナリデータの転送
- 双方向の HTTP マルチパートメッセージペイロードのサポート
- タイムアウト値を明示的に制御。返送に時間がかかるウェブサービスを呼び出すときに必要となることがあります。
- HTTP ステータスコードとテキスト、HTTP レスポンスヘッダ、コンテンツタイプへ、すべて補助的な戻り値としてのアクセス
6.3 In-memory バイナリデータ操作
- 次の関数のバイナリデータタイプ (別名 ” blobs”) の操作と変換のサポートが拡張されました: ReadBinaryFile, WriteBinaryFile, GetFromBinaryData, WriteImageFile, and Formatted Text Literals
base64literals に類似した、base16-encoded バイナリデータリテラルが追加されました。
- ReadBinaryFile と GetFromBinaryData は、それぞれ 3 番目と 2 番目の戻り値として、読み取りが終了したオフセットも返すようになりました。
6.4 データベース関数
DbQuery や DbWrite を呼び出すたびに接続を開いて閉じるのではなく、接続を一度だけ開くことで、データベースへのアクセスを高速化できるようになりました。新しい DbConnection 関数を使用すると持続的に接続でき、DbQuery や DbWrite の最初のパラメータとして渡すことができます。
6.5 解析
- MakeJSON に Null を省略するオプションが追加されました。
- ParseExpression が 2 番目の返り値としてエラーメッセージを返します (エラーがある場合)。
6.6 チョイスとマルチチョイス
Choice および MultiChoice プルダウンメニューで以下をサポートします。
- マルチレベル階層のサブメニュー
- «labels» または «selectionLabels»。メニューで見ることができ、インデックスとは異なります。
- «labels» または «selectionLabels» としてメニューに表示される画像
6.7 その他の新しい関数
7. ライブラリとモデル例
- Mutables ライブラリを追加
- Intro Diagram.ana (モデルを開かずに Analytica を起動したときに開くダイアグラム) のデザインを変更
- Rent vs Buy model.ana (チュートリアルモデル) を更新
8. Other
- Verbosity の新しいビットでメッセージ “Mid value is probabilistic. Do you want to view the mid value instead?” (中間値は確率的なものです。代わりに中間値を表示しますか?) を表示するようになりました。 これはお勧めしませんが、もし必要な場合は、Typescript ウィンドウから次のようにタイプしてください:
verbosity : 770
Analytica 6.3
1. スライダーコントロール
新しいスライダーは、ポインター(親指)を目盛りに沿ってドラッグすることで値を選ぶことができるユーザー入力です。これらの値には、連続した数値や離散的な数値、あるいはテキストを使用することができます。1つの値、間隔、複数の値を選択することができます。編集テーブルの中でスライダーを使用することができます。スライダーには、多くのスタイルとカラーオプションがあります。
2. カラーテーマ・ライブラリ
新しいカラーテーマライブラリでは、ダイアグラムのノードと背景、グラフの色の座標セットなど、モデルにテーマを適用することができます。
3. 属性を表示/非表示
例えば、OnChange や OnClick など、あまり一般的ではない属性を表示したり編集したりするなど、オブジェクトごとに表示する属性を選択するのがより簡単になりました。編集モードのオブジェクトウィンドウで、左下の表示/非表示アイコン ShowHideAttribute.png をクリックすると、現在のオブジェクトにのみ表示する(または表示しない)属性を選択できるメニューが表示されます。
編集モードのダイアグラムの下にある属性ペインでは、「More」▸「サブメニュー」から表示または非表示にする属性を選択することもできます。
オブジェクトメニューの「Attributes」ダイアログを使えば、すべてのオブジェクトにデフォルトで表示する属性をコントロールすることは可能です。これらの新しいオブジェクトレベルの属性設定は、属性ダイアログで設定されたデフォルトの可視性を上書きしますが、そのオブジェクトに対してのみです。
4. 矢印
破線矢印と付線矢印
ノード A が B の定義にない(あるいはまだない)にもかかわらず、ノード A が B に与える定性的な影響や潜在的な影響を示すことが有用な場合があります。A から B に矢印を描くと、破線で表示されるようになりました(「表示矢印」)。B の Definition に A を含めると実線になります。
A を明示せずに B を定義した場合でも、A から B への破線矢印を保持したい場合は、上記の Alignment probability ノードのように「Sticky」とすることができます。矢印を Sticky にするには、編集モードで矢印の線上で右クリックし、Sticky を選択します。
デフォルトの変更
送信元ノードを送信先ノードの定義に含める前に表示される、新しいデフォルトの破線表示矢印が気に入らない場合、Typescript を使用して以前の販売済み矢印に戻すことができます(注:F12 キーを押すと Typescript ウィンドウが表示されます)。
元のデフォルトの実線に戻すには、次のように入力します:
att_arrowproperties::displayDashStyle arrowclass:0
新しいデフォルトの破線に使用するには、次のように入力します:
att_arrowproperties::displayDashStyle arrowclass:1
未使用のエイリアスノードへの矢印を表示しない
Analytica は、変数 X のノードから、X のエイリアスを含むモジュール M への矢印を表示しなくなりました(X の影響を受ける他の変数も表示しません)。変数からモジュール M に矢印を描くと、もはや M のエイリアスは追加されず、破線の表示矢印として潜在的な影響力を示します。
後方互換性のため、Analytica 6.3 でモデルを実行しても表示されていたレガシーモデルの変数からモジュールへの表示矢印を表示するようにしました。
システム変数のエイリアスノードへの矢印
システム変数の別名を表示すると便利なことがあります(システム変数を選択し、CTRL-M を使用するか、システム変数のオブジェクトビューから「Make alias…」を使用します)。Analytica でシステム変数のエイリアスへの矢印が表示されるようになりました:
5. ビルトイン関数
新しいビルトイン関数
これは、«x» より小さい表現可能な最大の数を返します。丸め誤差と闘う必要があるアルゴリズムで有用です。
Log(x, b)
:任意の底 «b» に対する対数。«x» を省略した場合のデフォルトは、自然対数、底 e です。
Relu(x)
:«x» が負のとき 0 を、それ以外のときは «x» を返します(他の言語では一般的になっている)。
NextFloatToward(x, to)
:浮動小数点数 «x» を、コンピューター表現で可能な最小の増分であるイプシロンで増減させることができます。«to» > «x» のとき、«x» よりも大きい表現可能な最小の数を返します。«to» < «x» の場合。
既存関数の拡張
- TextCharacterEncode:新しい「タイプ」オプションの「characterName」で、拡張文字を使用できるようになりました。例:
TextCharacterEncode( 'Psi', '-characterName' → 'Ψ'
- RankCorrel と Correlation:新しいオプションフラグ「resultIfNoVariation」では、値が 3 個未満で無効な場合に返す結果を指定することができます。
- 重要度は «resultIfNoVariation» を 0 に設定し、不確実性の広がりがない NaN や Chance ノードの煩わしさを解消します。
- MdTable の便利な機能:
- 以前は MdTable で使用するためにグローバルインデックスを個別に定義する必要がありましたが、現在は ComputedBy(X)(X は MdTable を呼び出す変数名)を使用して各インデックスを定義することが可能です。インデックスは、対応するカラムからソートされたユニークな値に設定されます。
- グローバル・インデックスを提供しない場合、MdTable は必要なターゲット・インデックスに対して自動的にローカル・ターゲット・インデックスを作成することができます。この場合も、対応するカラムからソートされたユニークな値として定義されることになります。
- MdTable が、«vars» パラメータに対応するエントリに Null を指定した場合、任意の座標列を無視できるようになりました。
- 入力リレーショナルテーブルに Value カラムがない場合、MdTable は結果の各セルにマッチする行の数を返すことができます。«valueColumn» を Null に設定するか、«vars» にすべてのインデックスをリストアップするが、Valueカラムを持たないようにします。«conglomerationFn» を ‘Count’ に設定します。
- «vars» は «Cols» によってインデックスを付けることができます。この場合、«valueColumn» は任意の列または列の 1 次元配列とすることができる–すなわち、インデックス列が最初に来る必要はありません。例えば、
MdTable(T, Row, Col, ‘.’&Col )
は、リレーショナルテーブルの各カラムに対してローカルインデックスを自動的に作成します。これにより、すべてのインデックス変数をローカルまたはグローバルに設定することなく、簡単にクイック変換を行うことができます。
- NumberToText 関数と CellNumberFormat 関数には、複素数の虚数部を表示するかどうかを制御するオプションの «showZeroImPart» パラメータがあります。
- Formatted Text Literals のフォーマットフラグに、複素数の虚数部を表す’j’と’J’が追加されます。
6. グラフ
プロット軸の閾値
OnGraphDraw アノテーションライブラリに、Plot_axis_thresholds 関数が含まれるようになりました。
領域塗りつぶし線オプション
領域塗りつぶしプロットのボーダーラインをオフにするグラフ設定オプションが追加されました。グラフ設定ダイアログ #Chart_Type_tab の Chart Type タブで、Area Fill がオンのときに表示されます。
境界あり |
境界なし |
|
|
7. 評価
- これらの式は、通常、x が非常に小さいとき(特に abs(x)<1 のとき)にアンダーフローが発生しやすくなります:
Exp(x)-1
または 1-Exp(x)
Ln( x + 1 ), Ln( 1 + x ), Log( x + 1, b ), Log( 1 + x, b ), Logten( x + 1 )
, または Logten( 1 + x )
パーサーはこれらの構文形式を認識し、内部関数(_Expm1 または _Log1p)の呼び出しに置き換えることで、小さな x に対するアンダーフローを回避するようになりました。
- 複素数の虚数部が 0 である場合に、実数に自動変換する機能を削除しました。
慣習上、EnableComplexNumbers が OFF でも z が複素数の場合、複素関数 f(z) を計算することは可能でした。例えば、Ln(-2-3j) です。しかし、Ln(-2+0j) では Ln(-2) と評価され、警告を発して NaN を返すため(EnableComplexNumbers がオンでなければ)、この規約はやや矛盾することになります。
- 複素数の虚数部をゼロで出力するかどうかを制御する数値フォーマットフラグを追加しました。例えば、オンにすると、データ型が ComplexNumber の 5 という値に対して、5+0j と表示されるかもしれません。
- タイプスクリプトやアサインメントでは、以下の方法でフラグを設定することができます: NumberFormat::showZeroImPart of Va1 := 1
- 数値フォーマットダイアログで、「複素数 im 部分がゼロの場合は表示する」という新しいチェックボックスが表示されます。
- ‘j’(表示、例:5+0j)または’J’(非表示、例:5)でフォーマットされたテキストリテラルで制御可能です。
- NumberToText 関数と CellNumberFormat 関数に新しいオプションパラメーター «showZeroImPart» を追加しました。
8. UI フォント
Unicode 文字に対するフォントのフォールバック
現在のフォントで使用できない拡張 Unicode 文字は、ボックスとして表示されるのではなく、その文字を含む別のフォントを使用するように「フォールバック」するようになりました(例:▯)。
デフォルトフォントの設定
UI で使用されるデフォルトのフォントは、以下のレジストリ設定により変更できます。
- {HKLM,HKCU}/SOFTWARE/Lumina Decision Systems/Analytica/6.3/UI Font
- {HKLM,HKCU}/SOFTWARE/Lumina Decision Systems/Analytica/6.3/UI Fixed Font
複数のフォント名をカンマで区切ってリストアップすることができます。お使いのコンピューターにインストールされているリストの最初のフォントが使用されます。現時点では、主に社内の実験的な実装です。
9. 拡張文字の入力
キーボードのキーに対応しない拡張文字を、その名前を使って入力できるようになりました。バックスラッシュを押し、その名前を入力し、TAB キーを押します。16 進数で文字を入力することもできます。例えば:
sigma[TAB] ➝ σ
+22ed[TAB] ➝ ⋭
10. その他
- 属性メニューに、Constant ノードのオプションとして List of Text が追加されました。
- ノードアイコン画像のコピー&ペーストが可能です。
- 括弧のマッチング、拡張文字入力、入力中の構文の色分けなど、Typescript Window で Expression Assist が動作します。この最初のカットでは、式の文法しかわかりません(タイプスクリプト固有の文法やコマンドのパラメータや説明文は知らない)。
- 環境設定の「説明のあるノードを表示する」が「説明のないノードを表示する」に反転しました。
- 右クリックの変数コンテキストメニューに「ブラウズで隠す/ブラウズで隠すのを解除」オプションを追加しました。これは、ChangeNodeVisibility(handle(node), ‘Hidden in browse’) と同じ効果を持ちます。Analytica Enterprise 以上が必要です。
- Choice ノードで、n パラメータに ‘Null’ が使えるようになりました。
- File メニュー>Import ダイアログのキャプションを「Import data or image from file」に変更しました。
11. プレビュー:データインポートと変換
これらの「プレビュー」の機能は、ビルド 6.3.0.220 に存在しますが、最終的な決定や完全な文書化には至っていません。いくつかは、リリース 6.4 で初めて「公式」になる可能性があります。
- ファイルメニューの「Import…」オプションが使用できるようになりました:
- *.csv ファイルをダイアグラム(ノードが選択されていない状態)にインポートすると、新しい変数とその必要なインデックスが新しいノードとして自動的に追加されます。
- *.csv ファイルから編集テーブルへのインポートができるようになりました。
- 画像ファイルをダイアグラムに取り込むと、自動的に新しい Picture ノードが作成されます。
- 選択したノードに画像をアイコン画像として取り込むことができます。
- 編集モードで編集テーブルや結果テーブルから列を選択したときに、右クリックのコンテキストメニューに「列から新しい変数を作成…」というオプションが追加されました。これは、その列の値を使用して新しい変数を作成します(そのため、列インデックスを使用しません)。これは、インポートしたテーブルに異なる数量を混ぜたカラムがあり、それを別々の変数に分けたいときに便利で、Analytica のベストプラクティスとなっています。
- 編集モードでリレーショナル結果テーブルを表示する場合、右クリックのコンテキストメニューにある新しい「Relational table to array…」オプションを使用すると、テーブルを多次元配列に変換するためのウィザードダイアログが開きます。MdTable 関数を用いて定義された新しい変数と、必要な追加インデックス(ローカルまたはグローバル)を生成します。このウィザードを使えば、MdTable を使ったコードを書いたり、新しいインデックスを手動で作成したりすることなく、この一般的な変換をより簡単に行うことができます。