Toisen asteen ohjelmointi on menetelmä, jota käytetään optimoimaan monimuuttujainen toisen asteen funktio, joka voi olla tai ei olla lineaarisesti rajoitettu. Monet reaalimaailman ongelmat, kuten yrityksen salkun optimointi tai valmistajan kustannusten alentaminen, voidaan kuvata toisen asteen ohjelmalla. Jos tavoitefunktio on kupera, toteutettavissa oleva ratkaisu voi olla olemassa, ja se voidaan ratkaista tunnetuilla algoritmeilla, kuten laajennetulla yksipuolisella algoritmilla. On olemassa menetelmiä joidenkin ei-kuperien neliöfunktioiden ratkaisemiseksi, mutta ne ovat monimutkaisia eivätkä helposti saatavilla.
Matemaattisia optimointitekniikoita käytetään toisen asteen ohjelmoinnissa objektiivifunktion minimoimiseksi. Tavoitefunktio koostuu useista päätösmuuttujista, joita voidaan rajoittaa tai ei. Päätösmuuttujilla on valtuudet 0, 1 tai 2. Tavoitefunktioon voi kohdistua useita lineaarisia tasa -arvo- ja eriarvoisuusrajoituksia, jotka koskevat päätösmuuttujia. Esimerkki toisen asteen ohjelmoinnista on: minimoi f (x, y) = x2 + 3y2 – 12y + 12 missä x + y = 6 ja x> 0 ja y ≥ 0.
Usein on mielenkiintoista käyttää monimuuttujaisia toisen asteen toimintoja kuvaamaan todellisia ongelmia. Esimerkiksi nykyaikaista salkkuteoriaa käyttäen taloudellinen analyytikko yrittää optimoida yrityksen salkun valitsemalla sen omaisuuden osuuden, joka minimoi tiettyyn odotettuun tuottoon liittyvän riskin. Omaisuuspainoista ja omaisuuserien välisestä korrelaatiosta koostuva toisen asteen yhtälö kuvaa salkun varianssia, joka voidaan minimoida käyttämällä toisen asteen ohjelmointia. Toinen esimerkki voi olla valmistaja, joka käyttää toisen asteen yhtälöä kuvaamaan eri laatuosien ja tuotteen hinnan välistä suhdetta. Valmistaja voi minimoida kustannukset säilyttäen tietyt standardit lisäämällä lineaarisia rajoituksia toisen asteen ohjelmaan.
Yksi tärkeimmistä ehdoista toisen asteen ohjelman ratkaisemisessa on objektiyhtälön kupera. Neliöfunktion kuperaisuus määräytyy Hessenin tai sen toisen derivaatan matriisin mukaan. Funktiota kutsutaan kuperaksi, jos Hessenin matriisi on joko positiivinen määritelty tai positiivinen puolivarma, eli jos kaikki ominaisarvot ovat vastaavasti positiivisia tai ei-negatiivisia. Jos hessiläinen on positiivinen ja mahdollinen ratkaisu on olemassa, niin tämä paikallinen minimi on ainutlaatuinen ja maailmanlaajuinen. Jos Hessen on puolipositiivinen, mahdollinen ratkaisu ei välttämättä ole ainutlaatuinen. Ei-kuperilla toisen asteen funktioilla voi olla paikallisia tai maailmanlaajuisia vähimmäismääriä, mutta niitä on vaikeampi määrittää.
Kupera neliöfunktio voidaan ratkaista monella eri tavalla käyttämällä toisen asteen ohjelmointia. Yleisin lähestymistapa on simplex -algoritmin laajentaminen. Jotkut muut menetelmät sisältävät sisäpisteen tai esteen menetelmän, aktiivisen joukon menetelmän ja konjugaattigradientimenetelmän. Nämä menetelmät on integroitu tiettyihin ohjelmiin, kuten Mathematica® ja Matlab®, ja ne ovat saatavilla kirjastoissa monille ohjelmointikielille.