JSL受約束的最小化-按行求解器幫助嗨,您好,
我的目標是讓JSL遍歷兩列(x1,x2)中的值,這些值用於其他列的公式中,直到滿足[column(y1)-column(y2)= 0; column(z1)-列(z2)= 0]。 請注意,我要求解的方程是一個嵌套的非線性方程,其中
y1 = f1(x1,x2,x3,x4 ...)
y2 = f2(x1,x2,x3,x4 ...)
z1 = y1 + y2
z2 =獨立值
在Excel中,將方程式分解為多列非常簡單,以便更輕鬆地跟踪之間是否存在任何計算錯誤。 然後遍歷每一行並執行求解器以遍歷x1和x2直到滿足客觀標準。
在JMP中,使用“約束最小化”功能來複製它很難。 每次我運行腳本時,它看起來都不像在收斂,因為未達到目標目標並且值不斷變化。 另外,我只能設定1個目標,而不能設定2個。 下面是我的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>您是否認為我需要在表達式中包含整個嵌套方程式才能起作用? 還是我在這裡做錯了什麼。
任何幫助是極大的讚賞。 謝謝!
腳本編寫回复:JSL約束最小化-行逐行求解器幫助該代碼無法運行。 您能詳細說明一下嗎? Constrained Minimize也需要表達式,但是expr1似乎是一個保存值的變量,因此沒有什麼要優化的。回复:JSL約束最小化-行逐行求解器幫助劉鵬你好
是的,代碼本身無法運行,因為它需要我的數據表,其中包含我無法共享的專有數據。
就expr1不包含要優化的術語而言,我想我要問的問題是,如果expr1中使用的術語是其中包含優化變量的FORMULA列,則約束最小化是否仍然有效,還是我需要擴展expr1中的整個方程(而不是嵌套)。 請注意,我沒有選擇這樣做,因為方程很長。
如果需要更多說明,請告訴我。
謝謝。
回复:JSL約束最小化-行逐行求解器幫助下面的示例是一個基於您對問題的描述的假設情況。
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只能從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;
x1 = .5;<BR />x2 = .5;<BR />expr1 = dt:exprcol[i]+2*dt:exprcol[i];//trigger evaluation and fail.回复:JSL約束最小化-行逐行求解器幫助劉鵬你好
感謝您的回复。 我想我明白這裡的問題:
對於我有的情況:
- 100行數據表
- Z列= Y1列-Y2列
- Y1列=公式(X1,X2,X3 ..)
- Y2列=公式(X1,X2,X3 ..)
目的是通過在每一行的X1和X2列中設置一個值來使Z = 0列。
通過約束某些JSL變量x1和x2的值,使用Constrained Minimize使Z = 0列中的表達式不起作用,因為Y1和Y2列是基於X1和X2列中的值進行計算的公式列,並且未在全部交給JSL變量x1和x2。
看一下如何設置腳本,我想我可以嘗試使其適合我的情況的方法是在JSL內而不是在數據表的公式列中完成所有嵌套的計算。 運行約束的Min函數,然後將結果保存在數據表列中。
你怎麼看 ?
回复:JSL約束最小化-行逐行求解器幫助感覺像一個工作方法。 因此,只有一個表達式,因為要設置公式列,所以所有行的表達式必須相同。 您僅需要表,因為您需要逐行獲取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>回复:JSL約束最小化-行逐行求解器幫助劉鵬你好
謝謝,我嘗試遵循您如何設置min-constrained,它現在似乎確實對我有用。 我基本上需要在JSL中執行所有計算,而不是在公式列中進行計算。
問題-是否可以同時求解兩個方程? 是否可能具有非線性約束?
回复:JSL約束最小化-行逐行求解器幫助遵循以下兩個JSL函數可能與您的“求解方程”目標有關。 它們用於線性方程。


為了求解非線性方程,您可能需要將目標轉換為等效的優化問題。 然後使用JSL函數Maximize或Nonlinear平台來解決它。
對於具有非線性約束的優化,可以構建無約束的等效優化目標,因此可以使用某些JMP工具,例如JSL函數最大化,非線性平台或Profiler中的Desirability函數。 其他JMP工具可能對“搜索”最優方法很有用,例如JMP中的DOE平台。
方法的選擇取決於實際目標和約束條件。
回复:JSL約束最小化-行逐行求解器幫助劉鵬你好
感謝您共享這些選項,但是如果我基本上想做與以前相同的事情,則不清楚我可以使用哪種方法,即為數據表中的每一行求解x1和x2,但是在這種情況下,解決了兩個方程式同時,具有一些非線性約束。
您知道我們之前是否做過任何示例嗎? 很難相信對Excel很難做到這一點
謝謝
回复:JSL約束最小化-行逐行求解器幫助我們從那裡開始如何發布您認為容易解決的Excel示例呢? 問題不一定完全掌握在您手中,而是與您的目標非常相似。 或者只是他們向您展示如何使用的Excel示例,我們將看看是否可以使用JMP解決它。