
Japanese: 
Twiddle では 一連のパラメーターを最適化しようとしています
そのためには 関数 run() が長所を返さなければなりません
この長所の値は 平均クロストラック エラーです
平均クロストラック エラーを最小化するために Twiddle を実装したいとします
その場合 run の出力は 3 つのパラメーターに依存します
Twiddle の仕組みはこうなっています
3 つのターゲット パラメーターのパラメーター ベクトルを作成し ゼロで初期化します
また 調べたい潜在的に変更するベクトルを作成し 1 で初期化します
パラメーターを使ってコマンド run( ) を実行し
出力は全て一番良い誤差 best_err とします
今度は エラーが小さくなるように p を修正します
ここで Twiddle が登場します 本当に賢いアルゴリズムだと思います
これらのパラメーターを順番に見ていきます
明らかに 3 を書くべきではありません

Japanese: 
いじり回しではパラメータの集合を最適化します
そのためにはrun関数で
いい値を返す必要があります
このいい値はクロストラックエラーの
平均値でいいでしょう
クロストラックエラーの平均を最小化するよう
いじり回しを実装したいと思います
その状況ではrunの出力は
3つのパラメータに依存します
いじり回しは次のように動作します
3つの目標パラメータのベクトルを作り
0で初期化します
調査したい潜在的変化のベクトルdpも作り
まずは1で初期化します
これらのパラメータでコマンドrunを実行できます
出力はすべて一番いい誤差best＿errとします
誤差をより小さくするようpを修正しましょう
ここでいじり回しが登場します
これは本当に賢いアルゴリズムです
これらのパラメータを連続的に調べます
ここは当然3と書くべきではありません
pの長さを書くべきです

English: 
In Twiddle, we're trying to optimize for a set of parameters.
To do so, our function run() must return a goodness.
This goodness value might be the average crosstrack error.
Say I wanted to implement Twiddle so as to minimize the average crosstrack error.
If that's the case, then the output of run depends on the three parameters.
Here's how Twiddle works.
Build a parameter vector of our 3-target parameters, and initialize it with zero.
Also, build a vector of potential changes that you want to probe and initialize them for now with 1.
Then you can run our command run( ) with our parameters,
and whatever it outputs is our best error so far.
Now we wish to modify p as to make the error smaller.
That's where Twiddle comes in. It's a really smart algorithm, I believe.
We sequentially go through these parameters.
Obviously, you shouldn't write 3. You should write len of p.

Russian: 
В вертеть мы стараемся оптимизировать для набора параметров.
Чтобы сделать это, наша функция run() должен возвращать добра.
Это значение доброта может быть ошибка средняя crosstrack.
Говорят, что я хотел осуществить вертеть таким образом, чтобы свести к минимуму ошибки средняя crosstrack.
Если это так, то результат выполнения зависит трех параметров.
Вот как работает вертеть.
Построить параметр вектор нашей 3-целевых параметров и инициализируйте его с нуля.
Кроме того, построить вектор потенциальные изменения, что вы хотите зонд и их инициализировать сейчас с 1.
Затем вы можете запустить нашей команды, запускать () с нашими параметрами
и все, что он выводит до сих пор наши лучшие ошибка.
Теперь мы хотим изменить p чтобы сделать ошибку меньше.
Вот где вертеть приходит. Я считаю, что это очень умный алгоритм.
Мы последовательно пройти через эти параметры.
Очевидно вы не должны написать 3. Вы должны написать лен p.

Chinese: 
在twiddle里 我们试图去优化一个参数集合
为了这么做 我们"run"方程需要返回goodness
goodness值可能是全部CTE的均值
假定我实现twiddle的目标是最小化平均CTE
如果是这种情况 那么run的输出就依赖于三个参数了
twiddle是这样运作的
为3个目标参数声明一个3维零向量 
再声明一个3维向量 初始化为你想要探索的范围 这里是1
然后你可以调用"run" 并传入参数向量
无论它输出声明 这就是目前最好的误差
我们希望能修改向量p使得误差变小
这就是twiddle大展身手的地方了 我认为这是一个很聪明的算法
我们按顺序遍历这些参数
显然你不应该在这里写3 而是要写p的长度

Japanese: 
まず調査の値によりpを増やすことを試みます
修正したpに対する新たな誤差errを計算します
新たなerrがこれまでのbest＿errより
いい場合2つのことを行います
まずbest＿errに新たなerrを設定します
次にdpをわずかに大きな値へ修正します
そのためにdpへ1．1を掛けます
値が悪い場合 他の方法を試みます
pからdpを減算します　以前一度加算しているので
減算を2回行う必要があります
すべて書きませんが同様の処理を再び行います
errがbest＿errよりいいかチェックし
それを保持してdpに1．1を掛けます
しかしこれらのいずれにも失敗した場合
p［i］に元の値を設定し調査の値を減らします
そのためにdpへ0．9を掛けます
これがいじり回しの核心です
各座標に対し個別に実際に行うのです

Russian: 
Сначала мы пытались увеличить p на нашей зондирующего величину
Вычислите новую ошибку для этого новое изменение p.
Если эта новая ошибка это лучше, чем наши лучшие ошибка, то мы делаем две вещи.
Во-первых мы ставим best_err ошибаться, и мы даже изменить наши dp немного большее значение
путем умножения его с 1.1.
В противном случае мы стараемся другим способом.
Мы вычитаем dp от p--и мы должны сделать это дважды теперь, потому что мы добавили его раньше.
Тогда мы делаем то же самое снова здесь. Я не собираюсь написать ее.
Мы проверяем, является ли ошибка лучше, чем наши лучшие ошибка, мы сохраняем и dp умножить 1.1.
Но если оба из тех не--это одна над здесь и это один над здесь--
Мы установите p [i] исходное значение, и мы уменьшить наши зондирующего вещи здесь,
Скажем, путем умножения с 0,9.
Это ядро вертеть, и что она действительно делает это для каждой координаты в изоляции

English: 
First we tried to increase p by our probing value,
compute a new error for this new modified p.
If this new error is better than our best error, then we do two things.
First, we set best_err to err, and we even modify our dp to a slightly larger value
by multiplying it with 1.1.
Otherwise, we try the other way.
We subtract dp from p--and we have to do it twice now because we added it before.
Then we do the same thing again as over here. I'm not going to write it out.
We check whether the error is better than our best error, we retain it, and we multiply dp by 1.1.
But if both of those fail--this one over here and this one over here--
we set p[ i ] back to the original value, and we decrease our probing thing over here,
say, by multiplying it with 0.9.
That's the core of Twiddle, and what it really does is for each coordinate in isolation

Chinese: 
首先我们尝试把p增加一个单位的探索值
计算新的参数p所产生的误差
如果新的误差比目前最好的误差要好 那我们做两件事
一是把best_err更新为err 然后我们把dp的值稍微增大
自乘1.1就行
否则 我们就尝试另一种方式
我们要从p中减掉dp 此处要减掉两个单位 因为之前已经加上一个单位了
然后再做一遍之前的事情 我就不再写一遍了
我们会检查新的误差会不会好些 如果是就保留它 并让dp自乘1.1
如果这两处都失败了 —— 那里的以及这里的 ——
我们会让p[i]变回原本的值 并且降低探索的范围
比如说 自乘0.9
这就是twiddle的核心过程 它实际就是在遍历各个孤立的参数

Japanese: 
まず 調査のために p を増やし
新しい修正された p に対して新しいエラーを計算します
新しいエラーが私たちの最高のエラー数よりも優れていれば 2 つのことをします
まず best_err を err に設定し さらに dp に 1.1 を掛けることで
dp をわずかに大きい値に変更します
または 別の方法を試行します
p から dp を引きます 以前に追加しましたが 2 度追加します
同じ作業を繰り返しますここで 書き出すことはありません
エラーが最良のエラーよりも優れているかどうかをチェックし それを保持して dp に 1.1 を掛けます
しかし これらの両方が失敗し 繰り返した場合
p[ i ] を元の値に戻します たとえば 0.9 を掛けることによって
調査の対象を減らします
これが Twiddle の中核であり それぞれの座標に対して独立しています

English: 
it moves our parameter down a little bit by this value over here.
If it then finds a better solution, it retains it, and it even increments the probing interval.
If it fails to find a better solution, it goes back to the original and decreases our probing interval.
We do this entire thing so long as the sum of the dp's is larger than the threshold.
Somewhere in here we say while some of dp is larger than 0.00001.
It's hard to read, but I hope you can follow it.
This is Twiddle. Let me put this into pictures.
We have three parameters--0, 0, 0.
Then in the first iteration, we bump one of the parameters up and see if it improves the error.
If that's the case, we retain it.
Then we go to the second parameter. We bump it up. It might not work.
We bump it down and maybe retain that one, and so on.

Russian: 
она движется наш параметр вниз немного на это значение здесь.
Если он затем находит лучшее решение, оно сохраняет его, и он даже увеличивает зондирующего интервал.
Если она не сможет найти лучшее решение, она восходит к оригиналу и уменьшается нашей зондирующего интервала.
Мы делаем это всю вещь, до тех пор, пока сумма dp-больше, чем порог.
Где-то здесь мы скажем пока некоторые из dp больше, чем 0,00001.
Это трудно читать, но я надеюсь, что вы можете последовать за.
Это вертеть. Позвольте мне поставить это в фотографии.
У нас есть три параметра--0, 0, 0.
Затем на первой итерации мы bump один из параметров и посмотреть, если он улучшает ошибки.
Если это так, мы сохранить его.
Тогда мы идем к второй параметр. Мы bump. Она не может работать.
Мы bump его вниз и, возможно, сохранить что один и так далее.

Japanese: 
このdpの値でパラメータを少し上下させます
よりよい解を見つけたらそれを保持し
調査の間隔を増やします
いい解を見つけることに失敗した場合
元の値に戻し調査の間隔を減らします
このすべての処理をdpの総和が
閾値より大きい間 行います
この辺りでdpの総和が
0．00001より大きいとしましょう
読みにくいですが理解できると思います
これがいじり回しです
これを図で描いてみましょう
3つのパラメータ0、0、0があります
最初のループでパラメータの1つを増やします
さらに誤差を改善するかも調べます
改善されれば値を保持し
2つ目のパラメータへ移り それを増やします
ダメなら減らして保持するといった感じです

Chinese: 
根据这里值来移动参数
如果找到了一个更好的组合 就保留它 并提高探索范围
如果没能找到更好的组合 它回溯到原先的参数 并降低探索范围
只要dp之和大于阈值 我们就会不断重复以上步骤
在这个位置声明while循环 条件是sum(dp)>0.00001
这很难看明白 但我希望你能跟得上
这就是twiddle了 让我用图像来演示
我们有三个参数 0,0,0
在第一次迭代 我们增大其中一个参数 看看误差有无改进
如果有改进 就保留修改
然后转向第二参数 增大它 这也许行不通
接着我们减小它 也许可以保留 以此类推

Japanese: 
ここで この値においてのみ パラメーターを少し下げます
解決策を見つけた場合 その解決策を保持するため 調査間隔が さらに増加します
より良い解決策を見つけることができない場合は 従来の解決策に戻り 調査間隔を減少させます
dp の合計がしきい値よりも大きい限り すべてを行います
どこかで dp のいくつかが 0.00001 よりも大きくなっています
読みにくいですが フォローできればと思います
これが Twiddle ですこれを絵にしてみましょう
0 0 0 という 3 つのパラメーターがあります
最初の繰り返しで パラメーターの 1 つを上げて エラーが改善するかどうかを確認します
事実であるならば 解決策を保持します
2 番目のパラメーターに行きますパラメーターを増加させます動作しない可能性があります
パラメーターを減少させ 解決策が維持される可能性があります

Chinese: 
随着我们不断增大探索范围 也许会发现无论是上调还是下调参数都没用了
现在要做的事情是 回溯到原先的组合 
并且通过乘以0.9来降低探索范围
这样做的话 我们能通过缩放得到越来越精确的参数 直到收敛
这是一种局部爬山算法 但是它非常非常高效

English: 
Now, as we keep bumping up, we might find that neither bumping up nor bumping down helps.
What we do instead is we retain the original solution but make our probing interval
smaller than before by a factor of 0.9.
In doing so, we can zoom in more and more into a detailed parameter until it finally converges.
It's local hill climber, but it happens to be really, really efficient.

Japanese: 
増やし続けると増加も減少も
効果がないと分かるかもしれません
増減の代わりに元の解を保持しますが
調査の間隔を係数0．9で以前より小さくします
そうすることで最終的に収束するまで
詳細パラメータを突き詰めていきます
局所的な山登り法ですが極めて効果的です

Japanese: 
パラメーターを増加させると パラメーターを増加させても 減少させても 役に立たないことがわかります
代わりにすることは 元の解決策を保持するものの
調査間隔を以前より 0.9 倍小さくすることです
そうすることで 最終的に収束するまで詳細なパラメーターにズームインすることができます
これは ローカル山登り法ですが 本当に効率的です

Russian: 
Теперь, как мы держать bumping вверх, мы могли бы найти что ни bumping вверх ни натыкаясь вниз помогает.
Что мы делаем, вместо этого, мы сохранить оригинальное решение, но сделать наши зондирующего интервал
меньше, чем раньше на коэффициент 0,9.
Поступая таким образом, мы можно увеличить больше и больше в параметр detailed до тех пор, пока он наконец сходится.
Это местные Хилл альпинист, но это случается быть действительно, действительно эффективным.
