[Back]
Block display

マッチング時のMIN/MAX Name:Kentaro Harada Date:2017/07/13(Thu) 14:46:36 No.512

 マッチング時のフリーパラメータの上下限を決めるコマンドで、
キーワードがデフォルトでない場合、例えば BEND で K1 に制限を
つけて K1 を振るようなケース
FREE B1 K1;
BEND K1 MAX 0.1;
VAR;
GO;
がうまくいきません。書式が間違っていますでしょうか?

訂正 Name:Kentaro Harada Date:2017/07/13(Thu) 14:51:59 No.513

もちろん、
B1 K1 MAX 0.1;
のまちがいです。

Re: マッチング時のMIN/MAX Name:Akio Morita Date:2017/07/13(Thu) 18:46:56 No.514

>  マッチング時のフリーパラメータの上下限を決めるコマンドで、
> キーワードがデフォルトでない場合、例えば BEND で K1 に制限を
> つけて K1 を振るようなケース
> FREE B1 K1;
> BEND K1 MAX 0.1;
> VAR;
> GO;
>
現行実装では無理

MIN/MAXのパラメータストレージは、各Elementに付きデフォルトパラメータ分しか用意されていない

実装に必要な作業
* ifauxが指すデータ構造の拡張
* src/tfgetv.fのパラメータ設定構文の拡張

Re^2: マッチング時のMIN/MAX Name:Akio Morita Date:2017/07/13(Thu) 18:55:08 No.515

> >  マッチング時のフリーパラメータの上下限を決めるコマンドで、
> > キーワードがデフォルトでない場合、例えば BEND で K1 に制限を
> > つけて K1 を振るようなケース
> > FREE B1 K1;
> > BEND K1 MAX 0.1;
> > VAR;
> > GO;
> >
VariableRange関数経由の拘束が働くなら、

* VariableRange["B1", "K1", v_] := {-1e99, 0.1};
* VariableRange["B1", "K1", v_] := v =< 0.1;

等が使えるかもしれない

Re^3: マッチング時のMIN/MAX Name:Kentaro Harada Date:2017/07/14(Fri) 11:12:25 No.517

 ありがとうございました。

 MIN/MAX/MINMAX 等のヘルプは、例えば6極を切る時や4極を
手動で設定する時の
S* 0;
Q1 -0.17;
みたいな、値の設定コマンドに対する書式のリファレンスで、MAX/MINMAX 等については
デフォルトキーワードのみに対して働く
If MIN, MAX, MINMAX, MAXMIN are specified, it sets the limit of the default-keyword.
と明記されている旨、分かりました。(私の誤解でした。)
 どうもありがとうございました。

Re^4: マッチング時のMIN/MAX Name:Akio Morita Date:2017/07/14(Fri) 11:52:44 No.518

>  ありがとうございました。
>
>  MIN/MAX/MINMAX 等のヘルプは、例えば6極を切る時や4極を
> 手動で設定する時の
> S* 0;
> Q1 -0.17;
> みたいな、値の設定コマンドに対する書式のリファレンスで、MAX/MINMAX 等については
> デフォルトキーワードのみに対して働く
> If MIN, MAX, MINMAX, MAXMIN are specified, it sets the limit of the default-keyword.
> と明記されている旨、分かりました。(私の誤解でした。)
>  どうもありがとうございました。
>
さらにsrc/tfgetv.fでの実装に関してコメントすると、

* MAXMIN及びMINMAXと同義な修飾語として ABSMAX, MAXABSという予約語が存在する
* R_ELATIVE修飾語が存在し、RELATIVE修飾時は、SAVE値からの相対指定 saved-value * (1 + given-parameter) として解釈される
** `B1 K1 REL 0.1' は、 B1のK1値をSAVE値から 10%増しに設定する

Re: マッチング時のMIN/MAX Name:K. Oide Date:2017/07/20(Thu) 13:09:13 No.531

VariableRangeを使ってください。その目的のために作ってある関数です。

Example: VariableRange["QF","ROTATE",v_]:= -0.1 < v < 0.1;
VariableRange[x:("BC1L"|"BWL"),"L",_]:={Abs[ltheta[ucl]*Element["ANGLE",x]],lbmax};

Re^2: マッチング時のMIN/MAX Name:Akio Morita Date:2017/07/20(Thu) 14:47:15 No.533

> VariableRangeを使ってください。その目的のために作ってある関数です。
>
> Example: VariableRange["QF","ROTATE",v_]:= -0.1 < v < 0.1;
> VariableRange[x:("BC1L"|"BWL"),"L",_]:={Abs[ltheta[ucl]*Element["ANGLE",x]],lbmax};
>
VariableRangeを"純関数"で定義すると意図通りに働かない?
# VARで制約範囲は認識しているが、GOの動作が制約されていない
# OptimizeOptics[]は、制約されるっぽぃ

*** Welcome to SAD Ver.1.1.0.9k64a built at 2017-07-07 13:43:00 +0900 ***
*** Today: 14:42:36 Thursday 07/20/2017 ***
lminit: rlist0=0x0 align=4096 bits=52 offset=3392
OFF LOG ECHO;READ 77 ; 23
*** SADScript Initialization: /ldata/KEKB/KCG/developer/oldsad/Packages/init.n ***
*** Run time Environment: /ldata/KEKB/KCG/developer/oldsad/Packages/init.local.n ***
RFSW RADCOD RAD FLUC INTRA POL COD DAPER EMIOU CMPLO FOURI SMEAR
F F F T F F T F F F F T

VariableRange = VariableRange$[##]&;

VariableRange$["$DUMMYMARK", "BX", _] := {5, 10};
VariableRange$["$DUMMYMARK", "BY", _] := {1, 20};

FitFunction := Twiss[{"BX", "BY"}, "$DUMMYMARK"] - {1, 25};

FFS["FREE $DUMMYMARK BX; FREE $DUMMYMARK BY"];

FFS["VAR; GO; VAR", 6];
!Variable Keyword Now ! Previous Saved Minimum Maximum Couple Coefficient
$DUMMYMARK BY 1.000000000000 ! 1.000000000 .000000000 1.00000000 20.00000000 1.00000000
$DUMMYMARK BX 1.000000000000 ! 1.000000000 .000000000 5.00000000 10.00000000 1.00000000
Matched. ( 5.5760E-12) DP = 0.01000 DP0 = 0.00000 ExponentOfResidual = 2.0 OffMomentumWeight = 1.000
$$$ f AX ####### # -1.000000 $$$ f BX ####### # 2.000000 $$$ f NX ####### # .125000
$$$ f AY ####### # -.040000 $$$ f BY ####### # 25.040002 $$$ f NY ####### # .006363
$$$ f LENG ####### # 1.000000 $$$ f FUN1 0.0 1 .000000 $$$ f FUN2 0.0 1 2.3614E-6
!Variable Keyword Now ! Previous Saved Minimum Maximum Couple Coefficient
$DUMMYMARK BY 25.00000236136 ! 1.000000000 .000000000 1.00000000 20.00000000 1.00000000
$DUMMYMARK BX 1.000000000000 ! 1.000000000 .000000000 5.00000000 10.00000000 1.00000000

OptimizeOptics[]; FFS["CALC; VAR", 6];
{{{1,5},{20,10}},{(VariableRange$[##]&)->{{1,5},{20,10}}}}
{ 42.000000, 42.810000, 43.222500}
{ 42.000000, 42.133611, 42.810000}
{ 42.000000, 42.000000, 42.133611}
{ 42.000000, 42.000000, 42.000000}
Residual = 41.00 DP = 0.01000 DP0 = 0.00000 ExponentOfResidual = 2.0 OffMomentumWeight = 1.000
$$$ f AX ####### # -.200000 $$$ f BX ####### # 5.200000 $$$ f NX ####### # .031416
$$$ f AY ####### # -.050000 $$$ f BY ####### # 20.050000 $$$ f NY ####### # .007951
$$$ f LENG ####### # 1.000000 $$$ f FUN1 0.0 1 4.000000 $$$ f FUN2 0.0 1 -5.000000
!Variable Keyword Now ! Previous Saved Minimum Maximum Couple Coefficient
$DUMMYMARK BY 20.00000000000 ! 1.000000000 .000000000 1.00000000 20.00000000 1.00000000
$DUMMYMARK BX 5.000000000000 ! 1.000000000 .000000000 5.00000000 10.00000000 1.00000000

Re^3: マッチング時のMIN/MAX Name:Akio Morita Date:2017/07/21(Fri) 13:18:22 No.551

> > VariableRangeを使ってください。その目的のために作ってある関数です。
> >
> > Example: VariableRange["QF","ROTATE",v_]:= -0.1 < v < 0.1;
> > VariableRange[x:("BC1L"|"BWL"),"L",_]:={Abs[ltheta[ucl]*Element["ANGLE",x]],lbmax};
> >
> VariableRangeを"純関数"で定義すると意図通りに働かない?
> # VARで制約範囲は認識しているが、GOの動作が制約されていない
> # OptimizeOptics[]は、制約されるっぽぃ
>
シンボル評価を VAR側の処理と整合させて、r6200にて修正実施

Re^4: マッチング時のMIN/MAX Name:K. Oide Date:2017/07/22(Sat) 16:56:02 No.554

> > > VariableRangeを使ってください。その目的のために作ってある関数です。
> > >
> > > Example: VariableRange["QF","ROTATE",v_]:= -0.1 < v < 0.1;
> > > VariableRange[x:("BC1L"|"BWL"),"L",_]:={Abs[ltheta[ucl]*Element["ANGLE",x]],lbmax};
> > >
> > VariableRangeを"純関数"で定義すると意図通りに働かない?
> > # VARで制約範囲は認識しているが、GOの動作が制約されていない
> > # OptimizeOptics[]は、制約されるっぽぃ
> >
> シンボル評価を VAR側の処理と整合させて、r6200にて修正実施

k64のこの点については次回チェックインされるバージョンで対応します。ご指摘ありがとうございました。

- WebForum -