을 최소화하는 방법 비선형과 기능의 제약에서는 c#?

0

질문

고 싶을 최소화하는 다음과 같은 기능

enter image description here

제약 조건

$$w_i \geq 0, \sqrt{w_1^2 + w_2^2} = 1$$

C#. 나는 그것을 시도와 함께 Math.Net's Newton 방법,그러나 나는 방법을 알아낼 수 없습니다 그것을 할 수 있습니다. 을 최소화할 수 있는 방법을 이 함수에서 프로그래밍 방식으로 C#지정된$F_1,F_2$?

업데이트: 후에의 코멘트@MinosIllyrien 나가려고 다음과 같은,but I don't get the syntax:

_f1 = 0.3; // Global fields.
_f2 = 0.7;

var minimizer = new NewtonMinimizer(1E-4, 100, false);
var objectiveFunction = ObjectiveFunction.ScalarDerivative(FunctionToMinimize, GradientOfFunctionToMinimize);
var firstGuess = CreateVector.DenseOfArray(new[] {0.5});
var minimalWeight1 = minimizer.FindMinimum(objectiveFunction, firstGuess).MinimizingPoint;

private double GradientOfFunctionToMinimize(double w1){
  return _f1 - (w1 * _f2) / Math.Sqrt(1 - Math.Pow(w1, 2));
}

private double FunctionToMinimize(double w1){
  return w1 * _f1 + Math.Sqrt(1 - Math.Pow(w1, 2)) * _f2;
}

이 작동하지 않기 때문에,FindMinimum 방법을 사용하려면 IObjectiveFunction 으로 기능하지 않 IScalarObjectiveFunction...

Update2: 나서 솔루션을 구글:

var solver = Solver.CreateSolver("GLOP");
Variable w1 = solver.MakeNumVar(0.0, double.PositiveInfinity, "w1");
Variable w2 = solver.MakeNumVar(0.0, double.PositiveInfinity, "w2");

solver.Add(Math.Sqrt(w1*w1 + w2*w2) == 1);

이 발생하는 오류*연산자를 사용할 수 없습"Variable"및"변수". 누군가가 어떤 아이디어가?

1

최고의 응답

0

w₁2+ w₂2=1 은 기본적으로 단위 원. 단위 원도 설명할 수 있습으로 다음과 같은 파라메트릭 방정식:

(cos t,sin t)

다시 말해서,모든 쌍(w₁, w₂), 가 각 tw₁=cos tw₂=죄 t.

로 대체,함수가 된다:

y = F₁cos t + F₂죄 t

w₁≥0, w₂≥0 을 제한 단일 quadrant. 이것은 매우 간단하 제약,구성하는 하나의 변수:

0≤ t ≤½π

방법으로,함수할 수 있 간단 하다:

y = R cos(t -α)

어디 R =√(F₁2+ F₂2)및 α= atan2(F₂, F₁)

이것은 단순한 사인 파형입니다. 지 않고에 대한 제약조건 t,그것의 범위는 것[-R, R]을 만들고,최소값-R. 그러나 제약 조건을 제한하는 도메인과 함으로써 범위:

  • 는 경우 F₁<0 F₂<0,최소에서 w₁=-F₁/ R, w₂=-F₂/ R으로, y =-R
  • 0< F₁≤ F₂,최소에 w₁=1, w₂=0, y = F
  • 0< F₂≤ F₁,최소에 w₁=0, w₂=1, y = F

Notes:

  • 는 경우 F₁= F₂>0,다음 두 가지 minima.
  • 는 경우 F₁= F₂=0, y 은 그냥 평 영다.

에서 코드:

_f1 = 0.3;
_f2 = 0.7;

if (_f1 == 0.0 && _f2 == 0.0) {
    Console.WriteLine("Constant y = 0 across the entire domain");
}
else if (_f1 < 0.0 && _f2 < 0.0) {
    var R = Math.sqrt(_f1 * _f1 + _f2 * _f2);
    Console.WriteLine($"Minimum y = {-R} at w1 = {-_f1 / R}, w2 = {-_f2 / R}");
}
else {
    if (_f1 <= _f2) {
        Console.WriteLine($"Minimum y = {_f1} at w1 = 1, w2 = 0");
    }
    if (_f1 >= _f2) {
        Console.WriteLine($"Minimum y = {_f2} at w1 = 0, w2 = 1");
    }
}
2021-11-26 10:11:03

당신은 또한 확인할 필요는 모두 w1 및 w2 음수가 아닙니다. 하지 않을 경우,해결책 중 하나가 될 것이라(0,1)또는(1,0).
Mark Pattison

@MarkPattison 감사합을 위해 당신을 가리키는 이것으니 내가 편집한 내 대답합니다.
Ruud Helderman

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................