Sisäkkäisongelma on NP-täydellinen optimointiongelma , joka voidaan olennaisesti pelkistää reppuongelmaksi . Ongelma on lineaarinen kokonaislukuohjelmointiongelma . Ongelma ilmenee monilla teollisuuden aloilla. Kuvittele, että työskentelet sellu- ja paperitehtaalla ja sinulla on useita kiinteäleveisiä paperirullia, mutta eri asiakkaat tarvitsevat eri määrän eri levyisiä rullia. Kuinka leikata paperia jätteen minimoimiseksi?
European Paper Manufacturers Confederation [1] mukaan vuonna 2012 alueen 1 331 paperikonetta tuottaa kukin keskimäärin 56 miljoonan euron (noin 73 miljoonaa dollaria) jätettä. Jo 1 %:n säästö on erittäin merkittävää.
Sisäkkäisongelman vakiomuotoilu (mutta ei ainoa) olettaa listan m tilauksesta, jokainen tilaus vaatii kappaletta. Muodostamme kaikki mahdolliset sisäkkäiset yhdistelmät ("leikkauskartat") ja liitämme jokaiseen karttaan positiivisen kokonaislukumuuttujan , joka osoittaa kuinka monta kertaa karttaa on käytetty. Kirjataan ylös lineaarisen ohjelmoinnin ongelma:
, kokonaislukumissä - kuinka monta kertaa tilaus näkyy kortissa ja - kortin hinta (usein kadonnut) . Rajoitusten tarkka luonne voi johtaa hieman erilaisiin matemaattisiin ominaisuuksiin. Annetut rajat ovat minimirajoja ( vähintään tietty määrä on tuotettava, mutta ei ole poissuljettua, että tuotetta tulee lisää). Jos , on tarpeen minimoida lähdemateriaalin leikattujen kappaleiden määrä. Jos epätasa-arvosta johtuvat rajoitukset korvataan yhtäläisyyksillä, ongelmaa kutsutaan konteiroimiseksi . Yleisemmässä muotoilussa rajoitukset ovat kaksipuolisia (ja tässä tapauksessa häviön minimointiratkaisu voi poiketa ratkaisusta, jossa on vähimmäismäärä lähdemateriaalikappaleita):
Tämä ongelman muotoilu ei sovellu vain yksiulotteiseen tapaukseen. Monia muunnelmia on mahdollista, esimerkiksi tavoitteena ei ole minimoida jätettä, vaan maksimoida tuotettujen tavaroiden kokonaismäärä.
Yleisesti ottaen mahdollisten korttien määrä kasvaa eksponentiaalisesti m :n kanssa, tilausten määrä. Tilausten määrän kasvaessa ei ehkä ole käytännöllistä luetella mahdollisia sisäkkäismalleja.
Vaihtoehtoisesti voidaan käyttää jälkigenerointia . Tämä menetelmä ratkaisee sisäkkäisongelman aloittamalla muutamalla kortilla. Menetelmä luo tarvittaessa uusia karttoja ratkaisuprosessin aikana. Yksiulotteisessa tapauksessa uudet kartat ilmestyvät, kun ratkaistaan lisäoptimointitehtävä, selkärepputehtävä , joka käyttää tietoa lineaarisen ohjelmointitehtävän kaksoismuuttujista . Reppuongelman ratkaisemiseksi on tunnettuja menetelmiä, kuten haara ja sidottu menetelmä sekä dynaaminen ohjelmointi . Laiska sarakkeen luominen voi olla paljon tehokkaampaa kuin alkuperäinen lähestymistapa, varsinkin kun tehtävän koko kasvaa. Gilmour ja Gomory käyttivät ensimmäisen kerran 1960-luvulla julkaistuissa kirjoissa [2] [3] viivästettyä sarakkeiden luomista , jota käytettiin sisäkkäisongelmaan . He osoittivat, että tämä lähestymistapa johtaa taatusti (osittain) optimaaliseen ratkaisuun ilman, että kaikkia mahdollisia karttoja tarvitsee luetella etukäteen.
Gilmourin ja Gomoryn alkuperäinen menetelmä ei ollut kokonaisluku, joten ratkaisu saattoi sisältää murto-osia, esimerkiksi tiettyä karttaa piti käyttää 3,67 kertaa. Pyöristys lähimpään kokonaislukuun ei useinkaan toimi siinä mielessä, että se johtaa alioptimaaliseen ratkaisuun ja joidenkin tilausten ali- tai ylituotantoon (ja mahdolliseen rajoitusten rikkomiseen, jos se on kaksipuolista). Tämä puute on korjattu uusilla algoritmeilla, jotka mahdollistavat optimaalisen ratkaisun löytämisen (sillä mielessä, että ratkaisu löytyy mahdollisimman vähän hukkaa) erittäin suuriin ongelmiin (yleensä suurempiin kuin käytännössä tarvitaan [4] [5] ).
Pesäongelma on usein erittäin rappeutunut, koska suuri määrä ratkaisuja on mahdollista samalla häviöllä. Tämä rappeutuminen johtuu kyvystä järjestää osia uudelleen ja luoda uusia sisäkkäisiä kuvioita, mutta ei muuta tuloksena olevia menetyksiä. Tämä antaa koko joukon liittyviä tehtäviä, jotka täyttävät samat rajoitukset, kuten:
Paperikoneella voidaan valmistaa rajattomasti 5600 mm leveitä teloja (aihioita). Sinun tulee saada seuraavat 13 viimeistä rullaa:
Leveys | Rullat |
---|---|
1380 | 22 |
1520 | 25 |
1560 | 12 |
1710 | neljätoista |
1820 | kahdeksantoista |
1880 | kahdeksantoista |
1930 | kaksikymmentä |
2000 | kymmenen |
2050 | 12 |
2100 | neljätoista |
2140 | 16 |
2150 | kahdeksantoista |
2200 | kaksikymmentä |
Tässä pienessä tehtävässä on 308 mahdollista sisäkkäismallia. Optimaalinen ratkaisu vaatii 73 alkuperäistä rullaa ja siinä on 0,401 % jätettä. Voidaan osoittaa, että tälle jätemäärälle vähimmäispesämäärä on 10. Voidaan myös laskea, että tällaisia erilaisia ratkaisuja on 19, kussakin 10 pesää ja 0,401 % jätettä. Yksi tällainen ratkaisu on esitetty alla ja kuvassa:
Korttien lukumäärä | leikkauksia |
---|---|
2 | 1820 + 1820 + 1820 |
3 | 1380 + 2150 + 1930 |
12 | 1380 + 2150 + 2050 |
7 | 1380 + 2100 + 2100 |
12 | 2200 + 1820 + 1560 |
kahdeksan | 2200 + 1520 + 1880 |
yksi | 1520 + 1930 + 2150 |
16 | 1520 + 1930 + 2140 |
kymmenen | 1710 + 2000 + 1880 |
2 | 1710 + 1710 + 2150 |
73 |
Sisäkkäistehtävät voidaan luokitella eri tavoin [9] . Yksi tapa on sisäkkäiset mitat: yllä oleva esimerkki havainnollistaa yksiulotteista sisäkkäisyyttä (1D). Muita teollisia käyttötarkoituksia 1D-pesälle ovat putkien, kaapelien ja terästankojen leikkaaminen. Kaksiulotteisia ongelmia käytetään huonekalujen, vaatteiden ja lasin tuotannossa. 3D-sisäkkäisiä sovelluksia ei ole paljon, mutta niihin liittyvillä 3D -pakkausongelmilla on monia teollisia sovelluksia, erityisesti esineiden jakamisessa kuljetuskontteihin ( katso esim. Keplerin hypoteesi .
Pesäongelman teollinen sovellus massatuotantolaitoksille syntyy, kun perusmateriaali valmistetaan suurissa rullissa ja leikataan sitten pienemmiksi paloiksi (katso leikkaus ). Tätä tapahtuu esimerkiksi paperi- ja polymeerikalvojen valmistuksessa sekä litteiden metallilevyjen (rauta- tai pronssilevyjen) valmistuksessa. On olemassa monia muunnelmia ja lisärajoituksia, jotka johtuvat valmistus- tai prosessirajoituksista, asiakkaiden vaatimuksista ja laatuongelmista. Joitain esimerkkejä:
Paperiteollisuuden pesäohjelmistoja toimittaa ABB Group , Greycon , Honeywell ja Tieto .
Terästeollisuuden sisäkkäisalgoritmin muotoili Robert Gongorra vuonna 1998, ja SONS (Steel Optimization Nesting Software) kehitti ohjelmiston parantamaan teräslevyjen käyttöä ja vähentämään jätettä.
Giljotiinileikkauksen tehtävänä on leikata lasilevyt tietynkokoisiksi suorakulmioiksi käyttämällä vain leikkauksia, jotka kulkevat levyn koko pituudelta (tai leveydeltä).
Tähän liittyvä ongelma (yksiulotteiselle tapaukselle) parhaan vaatimukset täyttävän alkuperäisen rullan koon määrittämisessä; tunnetaan lajitelmaongelmana [10] .
Leikkausongelman muotoili ensimmäisen kerran Kantorovich vuonna 1939 [11] . Vuonna 1951, jo ennen tietokoneiden yleistymistä, L. V. Kantorovich ja V. A. Zalgaller ehdottivat [12] menetelmää materiaalin taloudellisen käytön ongelman ratkaisemiseksi leikkauksen aikana lineaarisen ohjelmoinnin avulla. Ehdotettua tekniikkaa kutsuttiin myöhemmin Column Generation Methodiksi .
Nimi | Lisenssi | Lyhyt kuvaus |
---|---|---|
VP Ratkaisija | GPL | Ilmainen ohjelmisto "Vector Packing Solver" ( VPSolver ), jota voidaan käyttää optimoimaan 1D sisäkkäisyyttä. Ratkaisumenetelmä perustuu virtauksen muotoiluun kuvaajassa. |