Citat:
Ursprungligen postat av
Tom.Of.Finland
Jag vill lära mig kvadratisk programmering, men har tittat i böckerna och det verkar sjukt svårt. Hittat många exempel på youtube. Men det är oftast teoretiker som lär ut och dom verkar använda så enorma tråkiga metoder så att man kan i praktiken skita i att optimera och köra på en höft istället.
Jag skulle vilja lära mig en algoritm som optimerar och minimerar 1/2x^TQx + c^Tx
Men anser du att en LP lösare är bättre än en QP-lösare? Om vi tänker praktik och enkelhet. Visst kanske man får "bättre" med QP, men hur mycket bättre då? Om det skiljer 0.1 decimal jämfört med LP och QP så väljer jag LP om det är sjukt mycket enklare.
Kan du visa ett exempel där man använder en algoritm? Jag är bekväm med linjär algebra och programmering.
Om en LP-lösare eller en QP-lösare är bäst beror naturligtvis vilket problem man vill lösa. Finns ingen silverkula som löser alla problem. Tyvärr är det svårt att hitta några problem alls som går att lösa utan stor kreativitet. Svårigheten ligger därför oftast i det senare, dvs. man måste vara kreativ långt utöver vad som lärs ut i grundkurser.
Sudoku är ett exempel på ett trivialt problem som går att lösa rakt av genom ILP/BIP-formulering. Det kan vara en lämplig nybörjaruppgift att fundera själv över.
Försöker vi lösa ett TSP-problem så blir det genast svårare då vi inte kan formulera det på LP-form utan att få otillåtna lösningar där städerna besöks genom flera delslingor, medan en tillåten lösning bara får innehålla en enda slinga som går genom alla städer. Lagom stora problem går att lösa genom att man itererar över LP-lösaren och i varje varv utökar matrisen med nya rader som förbjuder de otillåtna lösningar som dyker upp. Förr eller senare måste proceduren resultera i att man får en tillåten lösning, även om det kan ta rysligt lång tid.
Verkliga problem är oftast sådana att samtliga kvalitetskrav varken går att modellera som kostnad eller bivillkor. Man måste då som sagt vara kreativ för att ändå hitta en acceptabel lösning som uppfyller kraven.