Ich habe ein Problem, wo ich eine Auswahl von Kandidaten optimieren muss. Jeder Kandidat hat eine Punktzahl (zwischen 0 und 1), einen Typ (10 Auswahlmöglichkeiten von 1 bis 10) und eine Menge.lineare Zielfunktion mit nichtlinearen Randbedingungen und binären Variablen
Meine zu optimierenden Variablen sind binär. Sie repräsentieren die Wahl oder nicht des Kandidaten. Die Objektfunktion ist linear, sie ist das Skalarprodukt der Binärvariablen und ein Score-Vektor. Die Idee ist, die höchste Punktzahl zu wählen.
Jetzt habe ich eine lineare Einschränkung: die Anzahl der Kandidaten, die
höchstens 35 seine
ausgewählt werden kann, aber ich habe auch 10 nicht lineares Constraints: es gibt 10 Arten von Kandidaten. In der endgültigen Auswahl sollte die Gesamtmenge jedes Typs höchstens 10% der Gesamtmenge aller Typen betragen.Ich habe daher einen Code mit intlinprog
geschrieben, weil es binäre Variablen handhabt, aber ich kämpfe, um mit den nichtlinearen Einschränkungen umzugehen. Ich bin mir nicht sicher, ob es am besten wäre, sie zu linearisieren oder vielleicht einen anderen Löser zu benutzen.
hier ist der Code:
rng('default');
clc;
clear;
n = 100;
maxSize = 35;
nbType = 10;
NAV = 6000000;
thresholdType = 0.1 * NAV;
%%%TOP BASKET
score = rand(n,1)/10+0.9;
quantity = rand(n,1)*300000;
type = ceil(rand(n,1)*nbType);
typeMask = zeros(n,nbType);
for i=1:nbType
typeMask(:,i) = type(:,1) == i;
end
f = -score;
intcon = [1:1:n];
%Write the linear INEQUALITY constraints:
A = [ones(1,n);bsxfun(@times,typeMask,quantity)'/thresholdType];
b = [maxSize;ones(nbType,1)];
%Write the linear EQUALITY constraints:
Aeq = [];
beq = [];
%Write the BOUND constraints:
lb = zeros(n,1);
ub = ones(n,1); % Enforces i1,i2,...in binary
%x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub);
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);
Das Problem ist, in meinem A, b, die erste Bedingung ist die lineare eine (höchstens 35 Kandidaten) und die letzten 10 nicht linear, so dass es offensichtlich gibt nicht das richtige Ergebnis.
Hallo und willkommen zu stackoverflow. Zur Klarstellung können Sie Ihre Frage in einen Kommentar schreiben. – obchardon
Nein, ich kann nicht, weil Sie mich nicht lassen werden. – Chris
Nein, es ist ein bisschen komplizierter als das.Jeder Kandidat hat eine Menge daran angehängt. Dann kann die Summe der Menge jedes ausgewählten Kandidaten eines Typs nicht mehr als 10% der Gesamtmenge aller ausgewählten Kandidaten aller Art betragen. Grundsätzlich möchte ich am Ende der Optimierung auf meine optimierte Auswahl (max. 35 Kandidaten) schauen und wenn ich die Menge für alle Kandidaten von 1 Typ summe, ist dieser Wert kleiner oder gleich 10% der Summe der Anzahl aller ausgewählten Kandidaten. Hoffe es ist klarer? – Tulkkas