「数理最適化」の版間の差分
Dummy index (トーク | 投稿記録) 編集の要約なし |
Dummy index (トーク | 投稿記録) 編集の要約なし |
||
| (同じ利用者による、間の2版が非表示) | |||
| 7行目: | 7行目: | ||
[[RTT]]において、'''数理最適化'''の技法はレギュラーテンペラメントの「誤差の小さい」チューニングを求めるために使われている。 | [[RTT]]において、'''数理最適化'''の技法はレギュラーテンペラメントの「誤差の小さい」チューニングを求めるために使われている。 | ||
レギュラーテンペラメントは[[マッピング]]または[[コンマ基底]]によって定義される。これはチューニングを特定するような情報を含んでいない。このテンペラメントを調律するには、{{en仮リンク|tuning map}}を定義する、つまり各ジェネレーターのサイズを決定しなければならない。ではそれらはどうあるべきなのか? 一般的に、テンペラメントは[[純正律]] | レギュラーテンペラメントは[[マッピング]]または[[コンマ基底]]によって定義される。これはチューニングを特定するような情報を含んでいない。このテンペラメントを調律するには、{{en仮リンク|tuning map}}を定義する、つまり各ジェネレーターのサイズを決定しなければならない。ではそれらはどうあるべきなのか? 一般的に、テンペラメントは[[純正律]]をより少ない音で近似するものである。どうチューニングしてもいくつかの音程には不可避的に誤差が導入される。[[テンパーアウト|テンパー]]の肝は妥協にあり――関心のある音程の総合誤差が最小になるようなスイートスポットを見つけること、これにより元の純正律の和声をできるだけ保つようにする。 | ||
== 分類 == | == 分類 == | ||
大まかに言うと、態度がだいぶ違う2種類のチューニング方法がある。 | 大まかに言うと、態度がだいぶ違う2種類のチューニング方法がある。 | ||
* ノルム最適化は、形式的素数([[純正律サブグループ]]の基底のこと)だけではなく全ての音程(無限個)を対象とする、というていで、実際には無限和を回避し、音程の誤差を音程の複雑度で割ったもの({{en仮リンク|damage}})を考えることにより結局簡単な音程しか考える必要がなくなる(複雑度が有理数に関して加法的な振る舞いをするなら、例えば 9/4 の複雑度は 3/2 | * ノルム最適化は、形式的素数([[純正律サブグループ]]の基底のこと)だけではなく全ての音程(無限個)を対象とする、というていで、実際には無限和を回避し、音程の誤差を音程の複雑度で割ったもの({{en仮リンク|damage}})を考えることにより結局簡単な音程しか考える必要がなくなる(複雑度が有理数に関して加法的な振る舞いをするなら、例えば 9/4 の複雑度は 3/2 の複雑度の2倍になって誤差と比例するので割ったものは同じになり全ての音程のことを考えていると言えそうではある)という、なんだかエレガントなチューニング方法である。 | ||
* ターゲット最適化は、自由に作曲者が望んだいくつかの音程だけの総合誤差を小さくする。望まれる音程は大体簡単な音程であり、格子のより外側の音程は無関係なものとして無視される。 | * ターゲット最適化は、自由に作曲者が望んだいくつかの音程だけの総合誤差を小さくする。望まれる音程は大体簡単な音程であり、格子のより外側の音程は無関係なものとして無視される。 | ||
| 23行目: | 23行目: | ||
=== 重み === | === 重み === | ||
重み付けは対角行列で表され、形式的素数それぞれの重要度を決定する。[[ヴァルと調律空間|tuning space]]と[[モンゾと音程空間|interval space]]は互いに双対空間であって、tuning | 重み付けは対角行列で表され、形式的素数それぞれの重要度を決定する。[[ヴァルと調律空間|tuning space]]と[[モンゾと音程空間|interval space]]は互いに双対空間であって、tuning spaceでの重要度(重要な方向はより拡大して埋め込まれる)はinterval spaceでの複雑度の評価(簡単さ・原点への近さ)に相当する。テニー重みは最もありふれた重み付けであり、 | ||
$$ W = \operatorname {diag} (1/\log_2 (Q)) $$ | $$ W = \operatorname {diag} (1/\log_2 (Q)) $$ | ||
となる。ここで ''Q'' = {{val| 2 3 5 … }} でありその中の各素数 ''q'' の重要度は 1/log<sub>2</sub>(''q'')、複雑度は log<sub>2</sub>(''q'') | となる。ここで ''Q'' = {{val| 2 3 5 … }} でありその中の各素数 ''q'' の重要度は 1/log<sub>2</sub>(''q'')、複雑度は log<sub>2</sub>(''q'') となる。双対空間であるまま(内積がステップ数を出力することを維持したまま)重みを付けようとすると必然的に、''V'' をヴァル、''M'' をモンゾとして | ||
$$ | |||
V M = (V W) (W^{-1} M) | |||
$$ | |||
となり、''W'' が重要度、''W''<sup>−1</sup> が複雑度になるということである。 | |||
=== 傾き === | === 傾き === | ||
各素数軸を直交させた場合は分数の形になっているものと合成数の形になっているものを同じ重要度として扱うが、分数の形のほうが重要であると考えることが多い。例えば、同じように 3 と 5 を1個づつ使っていても、5/3 のほうが 15/1 より重要だとみなされる。傾きはこれを理論に導入する。 | |||
{{en仮リンク|ワイルノルム|Weil norm}}はテニー重みをベースに、軸の間の角度を 60 度に傾け(さらに線形従属な軸を加え)たものである。 | {{en仮リンク|ワイルノルム|Weil norm}}はテニー重みをベースに、軸の間の角度を 60 度に傾け(さらに線形従属な軸を加え)たものである。 | ||
重みと傾きは、マッピング行列に掛けることができる行列として表現できる。一般化して考えると、両者の区別は重要ではなく、まとめて重み・傾き変換行列と呼ばれる。 | |||
=== 次数 === | === 次数 === | ||
| 43行目: | 51行目: | ||
''L''<sup>1</sup> と ''L''<sup>∞</sup> が双対ノルム(双対空間それぞれに設定されたノルムである種の性質の良さがある組み合わせ)である。''L''<sup>2</sup> の双対は ''L''<sup>2</sup> である。 | ''L''<sup>1</sup> と ''L''<sup>∞</sup> が双対ノルム(双対空間それぞれに設定されたノルムである種の性質の良さがある組み合わせ)である。''L''<sup>2</sup> の双対は ''L''<sup>2</sup> である。 | ||
これは重みの逆数関係に似た話で、斜め方向(軸と軸の間の方向)の重要度と複雑度を扱っていると思えばよい。例えばtuning spaceの斜め方向が重要でinterval spaceの斜め方向を簡単扱いとするには、tuning spaceに ''L''<sup>1</sup>、interval spaceに ''L''<sup>∞</sup> を採用する。テニー高さはinterval spaceの斜め方向を複雑扱いするもので、tuning spaceに ''L''<sup>∞</sup>、interval spaceに ''L''<sup>1</sup> を採用する。 | |||
ハーモニーの複雑さは主にテニー高さのようにマンハッタンノルムでモデル化される。なのでマンハッタンノルムによる最適化(tuning spaceで ''L''<sup>∞</sup> 最適化)が最良のチューニングで、ユークリッドノルムは計算が簡単なせいで使われているだけだと({{en仮リンク|D&D's Guide}}は特にこの立場である)。しかしながら、ユークリッドノルムや特にチェビシェフノルムでより最適化分野の知見を活かすのもよい。これらは各素数のジェネレーターチェーン上の遠さが誤差量に反映される。 | |||
== 強制 == | == 強制 == | ||
| 52行目: | 62行目: | ||
=== 制約 === | === 制約 === | ||
制約条件を追加してそれも満たす最小化問題をきちんと解くこと。制約条件を増やした結果最小化以前に解が定まってしまう場合もある(純正のままにした音程のことを{{en仮リンク|固有モンゾ|eigenmonzo}}という。ランク-''n'' テンペラメントに固有モンゾを線形独立に ''n'' 個設定すると解が定まってしまう)。制約条件は最適化の{{w|実行可能領域}}を定義し、実行可能な範囲で最小化された結果をfeasibly optimalという。 | |||
== 枠組みの定式化 == | == 枠組みの定式化 == | ||
(デストレッチを除いて)テンペラメントの最適化問題は以下のように定義できる。マッピング行列 ''V''、{{en仮リンク|純正律マップ|just intonation point}} ''J'' が与えられ、重み・傾き変換行列 ''X'' | (デストレッチを除いて)テンペラメントの最適化問題は以下のように定義できる。マッピング行列 ''V''、{{en仮リンク|純正律マップ|just intonation point}} ''J'' が与えられ、重み・傾き変換行列 ''X''、tuning spaceのノルムの次数 ''q''、制約条件があるならその固有モンゾを並べた行列 ''M'' を決定する。generator tuning mapを ''G'' と書くと、 | ||
$$ | |||
\begin{align} | |||
& \text{find(動かす変数)} && G \\ | |||
& \text{that minimizes(最小化したい)} && \lVert GV_X - J_X \rVert_q \\ | |||
& \text{subject to(制約条件)} && (GV - J)M = O | |||
\end{align} | |||
$$ | |||
ここで (·)<sub>''X''</sub> は重み・傾き付き空間での変数を表し、 | |||
$$ | |||
\begin{align} | |||
V_X &= VX \\ | |||
J_X &= JX | |||
\end{align} | |||
$$ | |||
である。 | |||
== 主要なチューニング == | == 主要なチューニング == | ||
たくさんのチューニング方法に名前が与えられている。以下の表にてその一部をマトリックスにして示す。 | |||
{| class="wikitable" | |||
|+主要なチューニング | |||
|- | |||
! 重み–傾き\次数 !! 音程複雑度: チェビシェフ<br>(素数の重要度: ''L''<sup>1</sup>) !! ユークリッド<br>(''L''<sup>2</sup>) !! マンハッタン<br>(''L''<sup>inf</sup>) | |||
|- | |||
| テニー<br>ワイル || TC tuning<br><br> || [[TE tuning]]<br>[[WE tuning]] || [[TOP tuning]]<br><br> | |||
|- | |||
| 等辺(=重みなし)<br>傾き+等辺 || EC tuning<br><br> || [[Frobenius tuning]]<br><abbr title="Skewed-equilateral-Euclidean">SEE</abbr> tuning || EOP tuning<br><br> | |||
|- | |||
| Benedetti/Wilson<br>Skewed-Benedetti/Wilson || BC tuning<br><br> || [[BE tuning]]<br><abbr title="Skewed-Benedetti-Euclidean">SBE</abbr> tuning || [[BOP tuning]]<br><br> | |||
|} | |||
それぞれに制約付き変種やデストレッチ付き変種がある。例えば、TE tuningに対し[[CTE tuning]]、WE tuningに対し[[CWE tuning]]などである。 | |||
'''Note:''' [[:en:Sintel]]の[https://sintel.pythonanywhere.com/ temperament calculator]において、Frobenius tuningは"E tuning"と表示され、CEE tuningは"CE tuning"と表示される。 | |||