JSL 제약 최소화-행별 솔버 도움말안녕,
내 목표는 JSL이 [column (y1)-column (y2) = 0; column (z1)-)의 기준을 충족 할 때까지 다른 열의 공식에 사용되는 두 열 (x1, x2)의 값을 반복하는 것입니다. column (z2) = 0]. 제가 풀려고하는 방정식은 중첩 된 비선형 방정식입니다.
y1 = f1 (x1, x2, x3, x4 ...)
y2 = f2 (x1, x2, x3, x4 ...)
z1 = y1 + y2
z2 = 독립 값
Excel에서는 방정식을 여러 열로 나누기 만하면 그 사이에 계산 오류가 있는지 더 쉽게 추적 할 수 있습니다. 그런 다음 각 행을 반복하고 목표 기준이 충족 될 때까지 x1 및 x2를 반복하는 솔버를 수행합니다.
JMP에서 Constrained Minimize 기능을 사용하여 이것을 복제하는 데 어려움이 있습니다. 스크립트를 실행할 때마다 대상 목표가 충족되지 않고 값이 지속적으로 변경되기 때문에 수렴하는 것처럼 보이지 않습니다. 또한 2 개가 아닌 1 개의 목표 목표 만 설정할 수 있습니다. 아래는 내 JSL 코드의 예입니다. column_y1 및 column_y2는 내부에 x1 및 x2 변수가있는 수식 열입니다.
dt = Current Datatable();
expr1 = abs(:column_y1[i] - :column_y2[i]);
x1 = 0.5;
x2 = 0.2;
For Each Row(
i=Row();
minfun = Constrained Minimize (expr1, {x1(0.1,0.8), x2(0.01,0.5)},
<<MAXITER></MAXITER>이 작업을 수행하려면 표현식에 전체 중첩 방정식이 있어야한다고 생각하십니까? 아니면 내가 여기서 뭔가 잘못하고 있습니까?
어떤 도움이라도 대단히 감사합니다. 감사!
스크립팅Re : JSL Constrained Minimize-Row by Row Solver 도움말코드가 실행되지 않습니다. 자세히 설명해 주시겠습니까? 또한 Constrained Minimize는 표현식을 예상하지만 expr1은 값을 보유하는 변수 인 것처럼 보이므로 최적화 할 것이 없습니다.Re : JSL Constrained Minimize-Row by Row Solver 도움말안녕하세요 Peng Liu,
예, 불행히도 공유 할 수없는 독점 데이터가 포함 된 데이터 테이블이 필요하기 때문에 코드가 자체적으로 작동하지 않습니다.
최적화 할 용어를 포함하지 않는 expr1의 경우, 내가 가진 질문은 expr1에 사용 된 용어가 최적화 변수가 포함 된 FORMULA 열인 경우 제약 된 최소화가 여전히 작동하거나 확장해야한다는 것입니다. expr1의 전체 방정식 (중첩되는 대신). 참고로 방정식이 매우 길기 때문에 그렇게 선택하지 않았습니다.
더 자세한 설명이 필요하면 알려주세요.
감사.
Re : JSL Constrained Minimize-Row by Row Solver 도움말다음 예는 문제에 대한 설명을 기반으로 한 가상 상황입니다.
fcol 열은 다른 두 열 x1 및 x2의 공식입니다.
fcol의 평가는 두 개의 열 x1 및 x2에 따라 다르며 스크립트에있는 것과 같은 외부 JSL 변수의 영향을받지 않습니다.
마지막으로, 예제는 expr1이 표현식이 아니라 값임을 보여줍니다.
dt = New Table( "Untitled",
Add Rows( 1 ),
New Column( "fcol",
Numeric,
"Continuous",
Format( "Best", 12 )
),
New Column( "x1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values({.5})
),
New Column( "x2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values({.5})
),
);
dt:fcol << set formula(
(2 * x1 ^ 2 + 2 * x2 ^ 2) - 2 * x1 * x2 - 4 * x1 - 6 * x2
);
dt:fcol << eval formula;
i=1;
expr1 = abs(dt:fcol[i]);
show(expr1);
다음 예제와 같은 Expression 열이 필요한 것 같습니다.
dt = New Table( "Untitled",
Add Rows( 1 ),
New Column( "exprcol",
Expression,
"None",
Set Selected,
Set Values( {(2 * x1 ^ 2 + 2 * x2 ^ 2) - 2 * x1 * x2 - 4 * x1 - 6 * x2} )
)
);
i=1;
expr1 = dt:exprcol[i];
A = [1 1, 1 5];
b = [2, 5];
minFun = Constrained Minimize(
expr1,
{x1( 0, 5 ), x2( 0, 5 )},
<<LESSTHANEQ></LESSTHANEQ>
그리고 expr1은 표현식 열에서 값만 추출 할 수 있습니다. 식 작업 이외의 추가 작업은 평가를 트리거합니다. 예를 들어 다음은 예상대로 작동하지 않습니다.
dt = New Table( "Untitled",
Add Rows( 1 ),
New Column( "exprcol",
Expression,
"None",
Set Selected,
Set Values( {(2 * x1 ^ 2 + 2 * x2 ^ 2) - 2 * x1 * x2 - 4 * x1 - 6 * x2} )
)
);
i=1;
x1 = .5;<BR />x2 = .5;<BR />expr1 = dt:exprcol[i]+2*dt:exprcol[i];//trigger evaluation and fail.Re : JSL Constrained Minimize-Row by Row Solver 도움말안녕하세요 Peng Liu,
응답 해 주셔서 감사합니다. 여기서 문제를 이해한다고 생각합니다.
내가있는 시나리오의 경우 :
- 100 개의 행이있는 데이터 테이블
- Z 열 = Y1 열-Y2 열
- 열 Y1 = 공식 (열 X1, X2, X3 ..)
- 열 Y2 = 공식 (열 X1, X2, X3 ..)
목표는 각 행에 대해 X1 및 X2 열에 값을 설정하여 Z 열을 0으로 만드는 것입니다.
Constrained Minimize를 사용하여 일부 JSL 변수 x1 및 x2의 값을 반복하여 Z = 0의 식을 만들면 열 Y1 및 Y2가 열 X1 및 X2의 값을 기반으로 평가되고 다음에 연결되지 않은 수식 열이기 때문에 작동하지 않습니다. 모두 JSL 변수 x1 및 x2에.
스크립트를 어떻게 설정했는지 살펴보면 제 경우에 작동하도록 시도 할 수있는 방법은 데이터 테이블의 수식 열이 아닌 JSL 내에서 모든 중첩 계산을 수행하는 것이라고 생각합니다. 제한된 Min 함수를 실행 한 다음 결과를 데이터 테이블 열에 저장합니다.
어떻게 생각해 ?
Re : JSL Constrained Minimize-Row by Row Solver 도움말작업 방식처럼 느껴집니다. 따라서 수식 열을 설정했기 때문에식이 하나뿐이므로 모든 행에 대해식이 동일해야합니다. 행 단위로 x3, x4 등의 값이 필요하기 때문에 테이블이 필요합니다. 제한된 최적화와 z = 0의 대상 목표가 여기서 얼마나 관련이 있는지 확신 할 수 없지만 다음 스크립트는 흐름의 큰 그림을 보여줍니다. 그에 따라 설정 및 최적화를 교체하십시오.
dt = New Table( "Untitled",
Add Rows( 3 ),
New Column( "x1",
Set Values( [.,.,.] )
),
New Column( "x2",
Set Values( [.,.,.] )
),
New Column( "x3",
Set Values( [2,2,2] )
),
);
expr0 = expr( (x3 * x1 ^ 2 + 2 * x2 ^ 2) - 2 * x1 * x2 - 4 * x1 - 6 * x2 );
for (irow = 1, irow<=nrow(dt), irow++,
expr1 = substitute(name expr(expr0), expr(x3), dt:x3[irow]);
//show(name expr(expr1));
A = [1 1, 1 5];
b = [2, 5];
minFun = Constrained Minimize(
expr1,
{x1( 0, 5 ), x2( 0, 5 )},
<<LESSTHANEQ></LESSTHANEQ>Re : JSL Constrained Minimize-Row by Row Solver 도움말안녕하세요 Peng Liu,
감사합니다. 최소 제한을 설정 한 방법을 따라 시도했지만 지금은 저에게 효과가있는 것 같습니다. 기본적으로 모든 계산을 수식 열에 포함하는 대신 JSL에서 실행해야했습니다.
질문-두 방정식을 동시에 풀 수 있습니까? 비선형 제약을 가질 수 있습니까?
Re : JSL Constrained Minimize-Row by Row Solver 도움말다음 두 JSL 함수는 "방정식 풀기"목표와 관련이있을 수 있습니다. 선형 방정식을위한 것입니다.


비선형 방정식을 풀기 위해 목표를 동등한 최적화 문제로 변환 할 수 있습니다. 그런 다음 JSL 함수 최대화 또는 비선형 플랫폼을 사용하여 해결하십시오.
비선형 제약 조건이있는 최적화의 경우 제약 조건없이 동등한 최적화 목표를 구성 할 수 있으므로 JSL 함수 Maximize, 비선형 플랫폼 또는 Profiler의 Desirability Function과 같은 일부 JMP 도구를 사용할 수 있습니다. 다른 JMP 도구는 JMP의 DOE 플랫폼과 같은 최적의 "검색"에 유용 할 수 있습니다.
접근 방식의 선택은 실제 목표와 제약에 따라 달라집니다.
Re : JSL Constrained Minimize-Row by Row Solver 도움말안녕하세요 Peng Liu,
이러한 옵션을 공유해 주셔서 감사합니다.하지만 기본적으로 데이터 테이블의 각 행에 대해 x1 및 x2를 해결하는 이전과 동일한 작업을 수행하려는 경우 사용할 수있는 방법이 명확하지 않지만이 경우 두 방정식을 해결합니다. 동시에 일부 비선형 제약 조건이 있습니다.
이전에 예제가 있었는지 아십니까? 이 일을 Excel과 비교하는 것이 너무 어렵다고 믿기 어렵습니다.
감사
Re : JSL Constrained Minimize-Row by Row Solver 도움말해결하기 쉽다고 말한 Excel 예제를 게시하고 거기에서 시작하는 것은 어떻습니까? 반드시 당신의 손에있는 정확한 문제는 아니지만, 당신의 목표와 매우 유사한 것이 있습니다. 또는 사용 방법을 보여주는 Excel 예제 만 있으면 JMP를 사용하여 해결할 수 있는지 확인할 수 있습니다.