Top Banner
SVEU ˇ CILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE VARAŽDIN Mario Kolmaˇ ci´ c VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE DIPLOMSKI RAD Varaždin, 2013.
67

VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

Jan 01, 2017

Download

Documents

hoanghanh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

SVEUCILIŠTE U ZAGREBUFAKULTET ORGANIZACIJE I INFORMATIKE

VARAŽDIN

Mario Kolmacic

VIŠEAGENTNI SUSTAV ZA B2BPREGOVARANJE

DIPLOMSKI RAD

Varaždin, 2013.

Page 2: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

SVEUCILIŠTE U ZAGREBUFAKULTET ORGANIZACIJE I INFORMATIKE

VARAŽDIN

Mario Kolmacic

Redoviti student

Broj indeksa: 40488/11-R

Smjer: Baze podataka i baze znanja

VIŠEAGENTNI SUSTAV ZA B2BPREGOVARANJE

DIPLOMSKI RAD

Mentor:

Doc. dr. sc. Markus Schatten

Varaždin, lipanj 2013.

Page 3: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

Sadržaj

1. Uvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2. E-poslovanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

3. B2B pregovaranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

4. Višeagentni sustavi u B2B pregovaranju . . . . . . . . . . . . . . . . . . . . . . . . . 44.1. Zahtjevi sustava za B2B pregovaranje u e-poslovanju . . . . . . . . . . . . . . . . . 44.2. Arhitektura sustava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

5. Automatizirano pregovaranje u višeagentnim sustavima . . . . . . . . . . . . . . . . 75.1. Bilateralno pregovaranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85.2. Problem kvalitativnih vrijednosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

5.2.1. Kvalitativne vrijednosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.2.2. Neizrazite vrijednosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

5.3. Multilateralno pregovaranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

6. Višeagentni sustav javne nabave temeljem automatiziranog pregovaranja . . . . . . 116.1. Motivacija za uvodenje automatiziranog sustava javne nabave . . . . . . . . . . . . . 116.2. Javna nabava u Republici Hrvatskoj . . . . . . . . . . . . . . . . . . . . . . . . . . 12

6.2.1. Segmenti javne nabave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126.2.2. Postupci javne nabave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136.2.3. Zakonodavni i institucionalni okvir . . . . . . . . . . . . . . . . . . . . . . 146.2.4. Nadležne institucije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

7. Implementacija automatiziranog sustava javne nabave . . . . . . . . . . . . . . . . 157.1. SPADE platforma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157.2. Znacajke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167.3. Web graficko sucelje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167.4. Opis arhitekture sustava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

7.4.1. Web sucelje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177.4.2. Višeagentni sustav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177.4.3. Baza podataka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

7.5. Dijagram prikaza rada sustava . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187.6. ERA model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

I

Page 4: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.7. Natjecaji i ponude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217.8. Struktura Jedinstvenog rjecnika javne nabave (CPV) . . . . . . . . . . . . . . . . . 227.9. Unos natjecaja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237.10. Unos ponude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257.11. Strategije pregovaranja i njihova implementacija . . . . . . . . . . . . . . . . . . . . 277.12. Primjer prijave i pregovaranja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

8. Povezana istraživanja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

9. Zakljucak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

10. Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

11. Prilozi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4011.1. PRILOG 1 - Implementacija agenta narucioca . . . . . . . . . . . . . . . . . . . . . 4011.2. PRILOG 2 - Implementacija agenta ponudaca . . . . . . . . . . . . . . . . . . . . . 52

II

Page 5: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

1. Uvod

Pregovaranje je postalo vrlo bitno u današnje vrijeme. Vrlo cesto cujemo za taj pojam u gotovo

svim medijima. Pregovaranje bi mogli definirati kao dijalog izmedu dvoje ili više ljudi sa ciljem

da se postigne sporazum na dobrobit svih strana ili da se stekne prednost u odnosu na ostale strane.

Pregovaramo u gotovo svim podrucjima (poslovanje, neprofitne organizacije, vlade, itd.) i životnim

situacijama (vjencanje, roditeljstvo, škola, itd.). Postoje i profesionalni pregovaraci koji su specijali-

zirani za pregovaranje u važnijim podrucjima života kao što su financije (npr. brokeri), policija (npr.

pregovaraci u slucaju talacke krize), itd. Takva pregovaranja obavljaju se izmedu ljudi i poprilicno

se razlikuju od automatiziranog pregovaranja na kojem ce biti naglasak u ovom radu.

Rastom kolicine informacija i globalnog e-tržišta raste potreba za sve inteligentnijim rješenjima

koja ce omoguciti obavljanje velike vecine zadataka u ime svog vlasnika. Jedno od rješenja su

višeagentni sustavi. Inteligentni agenti obavljaju složene operacije kao što su donošenje odluka i

rješavanja kompleksnih problema. Autonomni su i adaptivni te su u mogucnosti donositi odluke

bez traženja dodatnih informacija od vlasnika ili drugih korisnika. Agenti omogucuju znacajno

smanjenje troškova transakcija te brže provodenje poslovnih procesa.

Automatizirano pregovaranje postaje sve važnije s obzirom na povecanje elektronickog trgova-

nja. Za automatizirano pregovaranje potrebni su odredeni preduvjeti kako bi bilo ostvarivo (npr.

strategija i protokol pregovaranja). Protokol pregovaranja jasno definira tok poruka izmedu prego-

varackih strana te odreduje tko kada i što smije reci i prema kojim pravilima. Protokol pregovaranja

mora biti javni i dostupan svim pregovarackim stranama. Strategija je privatna za svaku stranu jer

predstavlja nacin i pravila pregovaranja i omogucuje dobivanje najboljih rezultata. U ovom radu

automatizirano pregovaranje primjenjeno je na postupcima javne nabave, a implementirano je po-

mocu višeagentnog sustava.

U skladu s navedenim prvo ce se u poglavlju 2. navesti opci pojmovi o e-poslovanju. U po-

glavlju 3. predstavlja se B2B pregovaranje te faze i koraci pregovaranja. Poglavlje 4. bavi se više-

agentnim sustavima u B2B pregovaranju te je naveden primjer sustava koji je potkrijepljen stvarnim

primjerom. Automatizirano pregovaranje u višeagentnim sustavima (bilateralno i multilateralno)

objašnjeno je u 5. poglavlju. Zatim slijedi višeagentni sustav javne nabave temeljem automatizi-

ranog pregovaranja koji je implementiran u sklopu rada te detaljno objašnjenje arhitekture sustava.

Povezana istraživanja spominju se u 8. poglavlju.

1

Page 6: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

2. E-poslovanje

Porastom informacijskih tehnologija na tržištima, današnje poslovanje velikim se dijelom obavlja

elektronickim putem. Automatizacijom procesa i poslovnih transakcija omogucuje tvrtkama bolju

efikasnost i pouzdanost poslovnih procesa. Razlikujemo sljedece vrste e-poslovanja:

� B2B (eng. Business-to-business) - vrsta elektronickog poslovanja koje se odvija izmedu orga-

nizacija. Najveci dio elektronickog poslovanja upravog je te vrste. Obujam B2B transakcija

mnogo je veci nego kod ostalih poslovanja zbog mnogo transakcija u lancu opskrbe kako bi

proizvod bio izraden i prodan krajnjem kupcu.

� B2C (eng. Business-to-Consumer) - vrsta elektronickog poslovanja izmedu poduzeca i kraj-

njih korisnika. Treba naglasiti da bilo koji B2C proizvod ili usluga može biti i B2B proizvod.

� B2G (eng. Business-to-government) - predstavlja poslovanje izmedu razlicitih poduzeca i

javnog sektora. Primjeri B2G poslovanja su korištenje interneta za javnu nabavu, licenciranje,

itd.

� C2C (eng. Customer to customer) - elektronicko poslovanje izmedu krajnjih korisnika preko

neke trece strane. Primjer C2C poslovanja su online aukcije gdje prodavac objavljuje svoj

proizvod, a kupci daju svoje ponude. Aukcija se odvija preko nekog web servisa.

� Mobilno poslovanje - predstavlja kupnju i prodaju usluga korištenjem bežicne tehnologije tj.

korištenjem mobilnih uredaja. Primjer mobilnog poslovanja je mobilno bankarstvo.

Slika 2.1: Prikaz razlicitih vrsta e-poslovanja

2

Page 7: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

3. B2B pregovaranje

B2B prodavaci i kupci koriste pregovaracke strategije kako postigli sporazum o uvjetima i cijeni

koji zadovoljava obje strane. Nužno je da strategije uzimaju u obzir interese i kupaca i prodavaca.

Pregovaranja su sveprisutna u raznim kontekstima kao što su marketing, uspostavljanje poslovnog

ugovora, upravljanje radnim sporovima, rješavanje granicnih sukba, upravljanje talackom krizom,

itd. Pregovaranje se odnosi na proces kojim skupina agenata (ljudskih ili programskih) komunicira

jedna s drugom kako bi se postigao prihvatljivi dogovor o raspodjeli sredstava.

S obzirom na sveprisutnost i važnost pregovora u razlicitim podrucjima, istraživanje teorija

i tehnika pregovaranja privuklo je pažnju iz više znanstvenih disciplina kao što su distribuirana

umjetna inteligencija, socijalna psihologija, teorija igara, operacijska istraživanja, a u novije vrijeme

i agentno-posredovano elektronicko poslovanje. Unatoc razlicitim pristupima prema proucavanju te-

orije pregovaranja, model pregovaranja sastoji se od cetiri osnovna elementa: protokol pregovaranja,

strategija pregovaranja, okružje pregovaranja i okružje agenata [Woolridge, 2002]. Pregovaranje se

sastoji od sljedecih faza i koraka [Eunson, 1994]:

� Priprema

• Postavljanje ciljeva - utvrdivanje naših ciljeva te razmatranje mogucih ciljeva druge

strane

• Definiranje rezervnog plana - razmotriti najbolje alternative u slucaju neuspjelog prvo-

bitnog plana te razmotriri najgore moguce pozicije

• Postaviti prioritete - odrediti važnost pojedinih parametara

• Odluciti o najboljim i najgorim limitima trgovanja - odrediti najviše i najviše vrijednosti

pojedinihg parametara trgovanja (najniža cijena, kolicina, itd.)

• Planirati nepredvidive situacije izvan okvira trgovanja - promotriti moguca odstupanja

(plan "Što ako ... ?" te odgovarajuce strategije)

� Pregovaranje

• Postavljanje problema - na pocetku pregovaranja ne smijemo otkriti prioritete

• Postavljanje pitanja - pitanja služe za bolje informiranje i upoznavanje motiva koji nam

otkriva smjer pregovaranja

• Rezimiranje - parafraziranje dosadašnjih koraka i prikupljenih informacija

• Ustupci pregovaranja - postizanje dogovora o tome koje akcije je potrebno poduzeti i pod

kojim uvjetima

• Zakljucak - sumiranje i zakljucivanje pregovora

3

Page 8: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

4. Višeagentni sustavi u B2B pregovaranju

Rast ICT (engl. Information and Communication Technologies) industrije u svim segmentima

tržišta i poslovanja omogucio je tvrtkama korištenje naprednih tehnologija i inteligentnih agenata

kako bi smanjili vrijeme transakcija i poboljšali proces pregovaranja. Potreba za razvojem alata za

inteligentnu podršku naglo je porasla zbog rasta broja transakcija elektronickim putem. Inteligentna

podrška omogucuje povecanje stupnja sofisticiranosti i automatizacije e-poslovanja. Vjeruje se da

ce B2B i dalje rasti te ce biti dominantni nacin poslovanja u bližoj buducnosti.

Pregovaranje predstavlja jedan od kljucnih koraka u B2B e-poslovanju. Programski agenti su en-

kapsulirani racunalni sustavi smješteni u nekima okružjima kao što su internet i sposobni su izvoditi

fleksibilne i autonomne akcije u tom okružju kako bi postigli zadani cilj. Agenti unutar višeagent-

nog sustava komuniciraju i autonomno donose odluke u ime svojih korisnika. Na taj nacin smanjuju

vrijeme ljudskog pregovaranja i prepoznaju optimalna ili približna rješenja kompleksnih prostora

pregovaranja.

4.1. Zahtjevi sustava za B2B pregovaranje u e-poslovanju

Mehanizmi pregovaranja za B2B e-poslovanje moraju biti racunalno ucinkoviti. Agent koji pred-

stavlja svog korisnika zna vlastita svojstva, ali ne i svojstva svojih protivnika u pregovaranju. U ve-

cini B2B pregovaranja, agent mora biti u stanju donositi razumne odluke temeljene na nepotpunim

i neizvjesnim informacijama. Buduci da B2B pregovaranja cesto ukljucuju višestruke parametre

(cijena, kolicina, kvaliteta, itd.) istovremeno, mehanizmi pregovaranja moraju biti u mogucnosti

podržati multilateralna pregovaranja. Konkretno, B2B odnosi i interakcije trebaju se modelirati kao

integrativna pregovaranja. Ukratko, cilj automatiziranog sustava za B2B pregovaranje je ucinkovito

traženje win-win situacije s obzirom na specificna svojstva.

4.2. Arhitektura sustava

Web servisi višeagentnog sustava omogucavaju interakciju te su izgradeni na vrhu postoje-

cih Web protokola, a temelje se na otvorenim XML standardima. Dizajn dinamickih rješenja e-

poslovanja temeljenih na B2B e-poslovanju naziva se BBT (Business-to-Business Transaction) mo-

del koji sustavno analizira procese na B2B e-tržištima [He et al., 2003] [Lau, 2006]

S obzirom na BBT model [He et al., 2003], B2B poslovni proces može se podijeliti u šest naj-

važnijih faza:

� formiranje partnerstva - potraga za poslovnim partnerima koji pružaju proizvode ili usluge

u opskrbnom lancu

4

Page 9: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

� posredovanje - proces traženja odgovarajucih partnera, tj. prodavaca koji prodaju proizvode

ili usluge i kupaca koji kupuju te proizvode

� pregovaranje - trgovci pokušavaju postici dogovor o uvjetima prodaje

� formiranje ugovora - oznacava kraj pregovaranja i ukljucuje dogovorene uvjete koje ce sadr-

žavati ugovor

� ispunjenje ugovora - obavljanje transakcija u skladu s ugovorom

� procjena usluge - posljednja faza gdje sudionici procjenjuju njihovu razinu zadovoljstva os-

tvarenim transakcijama te pripremaju mogucu ponovnu suradnju u buducnosti

Arhitektura WSDNS (eng. Web Service Discovery and Negotiation System) servisa prikazana je na

slici 4.1. Predložena WSDNS arhitektura izravno podržava prve cetiri faze BBT modela (formiranje

Slika 4.1: Prikaz WDSNS-a [Lau, 2006]

partnerstva, posredovanje, pregovaranje, formiranje ugovora) i lako je proširiva na posljednje dvije

faze ukoliko je to potrebno.

Svakodnevni primjer primjene WSDNS platforme za ucinkovito B2B e-poslovanje možemo ilus-

trirati na sljedeci nacin:

1. Pružatelji usluga kao što su proizvodaci automobila angažiraju svoje programske agente (npr.

klijentske aplikacije) kako bi objavili njihove informacije o proizvodima ili uslugama na web

server (Web server 1 na slici 4.1). Specifikacije i detalji aplikacije opisani su pomocu univer-

zalnog WSDL (eng. Web Service Description Language) jezika.

5

Page 10: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

2. Kada trgovac na veliko želi kupiti veliki broj automobila od nekog proizvodaca, zastupnik

može prenijeti taj zadatak na svoje inteligentne programske agente. Programski agent (npr.

druga klijentska aplikacija) šalje upit UDDI (eng. Universal Description Discovery and Inte-

gration) serveru [Curbera et al., 2002] za pretragu relevantnih proizvoda i dobivanje pozivnih

informacija od web servisa. Auto zastupnik instancira njihov racunalni agent na racunalo ili

mobilnu uslugu. Programski ageni auto zastupnika i proizvodaca automobila mogu se povezati

na WSDNS preko standardnog XML-baziranog SOAP (eng Simple Object Access Protocol)

kommunikacijskog standarda.

3. Ako je servisno sucelje transakcijskog web servisa prepoznato od strane programskog agenta

auto zastupnika (tj. korisnik servisa), konekcija na transakcijski servis (Web server 2 na slici

4.1.) uspostavlja se odmah izmedu auto zastupnika i proizvodaca automobila (tj. pružatelj

servisa). Ukoliko je sucelje web servisa nepoznatog tipa prema korisniku servisa, prije konek-

cije biti ce provedena adaptacija servisa. U ovom slucaju, programski agent auto zastupnika

može ispitati katalog automobila na transakcijskom serveru proizvodaca automobila nakon

uspješnog uspostavljanja usluge.

4. Nakon dobivanja relevantne informacije o automobilu od proizvodaca automobila, auto zas-

tupnik može poceti pregovore sa proizvodacem automobila o cijeni, vremenu dostave auto-

mobila, uvjeti placanja, broj dostavljenih automobila, itd. Auto zastupnik i proizvodac auto-

mobila mogu dobiti informacije o davatelju usluge pregovarackog servisa preko ranije spo-

menutog UDDI servera. nakon dobivanja relevantne WDSL-temeljene specifikacije, klijent-

ske aplikacije koje predstavljaju svoje stranke kontaktiraju ontologijski server (Web server 3

na slisi 4.1.) kako bi podijelili zajednicki skup pregovarackih atributa. Nakon takvog tzv.

"hand-shake" procesa, kupac i prodavac mogu poceti pregovore instancirajuci odgovarajuce

programske agente na pregovarackom serveru. Kada se postigne dogovor, odgovarajuci agenti

ce obavijestiti njihove korisnike kako bi prihvatili ili odbili ponudu preko racunala ili mobilnog

uredaja.

Uloge razlicitih komponenti WSDNS-a mogu se razumijeti u smislu tradicionalnog nacina kupnje

automobila. UDDI servis može predstavljati oglasnik gdje možemo pronaci razlicite vrste poslo-

vanja. WSDL je analogno narudžbenici koja odreduje koje su informacije potrebne za ispunjenje

narudžbe, a SOAP protokol definira format za prijenos elektronickog primjera narudžbenice. Tre-

nutna arhitektura lako se može proširiti na posljednje dvije faze B2B poslovnog procesa. Npr. kupac

i prodavac mogu se spojiti na transakcijski server kako bi pratili status narudžbi i ispunjenje odrede-

nih uvjeta. Štoviše, korisnici servisa mogu poslati povratne informacije o proizvodima i uslugama

na transakcijski server za daljnju analizu od strane pružatelja servisa.

6

Page 11: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

5. Automatizirano pregovaranje u višeagentnim sustavima

Agenti koji pregovaraju moraju postici odredeni sporazum koji zadovoljava obje strane. Prije

detaljnije obrade teme, treba spomenuti cetiri razlicite komponente pregovaranja [Woolridge, 2002]:

� Skup pregovaranja - predstavlja prostor mogucih ponuda agenata

� Protokol - definira legalne ponude agenata, kao što su funkcije prema povijesti pregovaranja

� Kolekcija strategija - jedna za svakog agenta, koja odreduje koje ce ponude agenti dati. Naj-

cešce, strategija koju agent igra je privatna, što znaci da nije vidljiva ostalim agentima sudi-

onicima pregovaranja.

� Pravilo - odreduje da li je postignut sporazum, i kakav je taj sporazum.

Pregovaranje se obicno obavlja u serijama te svaki agent daje ponudu u svakoj svakoj iteraciji. Po-

nude koje agenti daju su definirane prema njihovim strategijama te moraju biti pravilne, baš kako su

definirane prema protokolu. Ukoliko je postignut dogovor, koji je definiran prema pravilu dogovora,

tada pregovaranje prestaje sa dogovorom.

Ova cetiri parametra vode prema ekstremno bogatoj i složenoj okružju za analizu. Prvi atribut

koji može komplicirati pregovaranje je kada su ukljucena višestruka pitanja. Primjer jednostrukog

pregovaranja bio bi kada dva agenta pregovaraju samo o cijeni neke robe za prodaju. U takvom sce-

nariju, postavke agenata su simetricne, što znaci da sporazum koji je više pozitivan za jednog agenta,

ce biti manje pozivitan za drugog agenta, i obrnuto. Takvi simetricni scenariji se lako analiziraju jer

je uvijek dolazi do ustupka. Tako npr. ako prodavac želi prodati robu, mora napraviti ustupak, tj.

sniziti cijenu, a kupac ako želi kupiti, mora takoder napraviti ustupak, tj. povecati svoju ponudu.

U višestrukim pregovaranjima, agenti ne pregovaraju samo o vrijednosti jednog atributa, nego o

vrijednostima više atributa, koji mogu biti u medusobnom odnosu. Na primjer, kada kupujemo auto,

cijena nije jedini faktor o kojem pregovaramo (iako vrlo vjerojatno najdominantniji). Kupca može

interesirati dužina garancije, servis vozila, dodatna oprema itd. U višestrukim pregovaranjima cesto

nije ocit pravi ustupak, jer nije slucaj da sve vrijednosti atributa moraju biti povecane ili smanjene.

Višestruki atributi vode k eksponencijalnom rastu prostora mogucih rješenja. Ukoliko u nekoj

domeni pregovaraju agenti o vrijednosti n Boole-ovih varijabli, v1, . . . , vn, postavke se sastoje od do-

djela ili istinitih ili lažnih vrijednosti za svaku varijablu vi. Vidimo da postoji 2n mogucih dogovora

u takvoj domeni. To znaci da, u pokušaju da odluci koja ponuda ce biti sljedeca, za agenta ce biti

potpuno neizvedivo da razmorti svaki moguci dogovor u domenama srednje velicine. Vecinom, do-

mene pregovaranja su mnogo kompleksnije od ove. Na primjer, agenti pregovaraju o vrijednostima

atributa gdje ti atributi mogu imati m mogucih vrijednosti, što dovodi do mn mogucih dogovora.

7

Page 12: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

Složenost pregovaranja odreduje i broj agenata ukljucenih u pregovaranje te nacin na koji agenti

komuniciraju.

Postoje sljedece tri mogucnosti:

� Pregovaranje jedan-na-jedan - Agent pregovara sa samo jednim agentom. Djelomicno jed-

nostavan primjer pregovaranja jedan-na-jedan je kada agenti imaju simetricna svojstva s ob-

zirom na moguce ponude. Primjer takvog pregovaranja u svakodnevnom životu bio bi kada

pregovaramo o uvjetima sa prodavacem vozila.

� Pregovaranje više-na-jedan - U ovom pregovaranju, jedan agent pregovara s nekim brojem

ostalih agenata. Aukcije su primjer više-na-jedan pregovaranja. Pregovaranje više-na-jedan se

cesto tretira kao veci broj jedan-na-jedan pregovaranja.

� Pregovaranje više-na-više - U ovom pregovaranju, više agenata pregovara s više ostalih age-

nata simultano. Prema najgorem slucaju, gdje je ukupno n agenata ukupno ukljuceno u prego-

varanje, znaci da je moguce do n{n − 1}/2 pregovarackih dretvi. Iz gledišta analize, takvim

pregovaranjem teško je upravljati.

5.1. Bilateralno pregovaranje

Model bilateralnog pregovaranja [Raïffa, 1982] koristi skup kvantitativnih varijabli. Neka su s

i (i ∈ {a, b}) oznaceni agenti koji pregovaraju i neka su sa j (j ∈ {1, ..., n}) oznaceni elementi

ponude. Neka je nadalje s xj ∈ [minj,maxj] oznacen moguc skup vrijednosti za element ponude

j. Svaki agent posjeduje funkciju korisnosti V ij : [minj,maxj] −→ [0, 1] koja pridjeljuje pojedinim

vrijednostima elemenata ponude korisnost (radi jednostavnosti korisnost ce biti u intervalu [0, 1]).

Sa wij oznacit cemo relativnu težinu koju agent i pridodaje elementu ponude j (pretpostavljamo da

su relativne težine normalizirane tj.∑

16j6n wij = 1). Ukupna funkcija korisnosti agenta i za neku

ponudu x = (x1, ..., xn) definirana je kao:

V i(x) =∑

16j6n

wijV

ij (xj)

.

5.2. Problem kvalitativnih vrijednosti

Prethodni model polazi od pretpostavke da su svi elementi ponude kvantitativnog karaktera.

Kako bi se u obzir uzele i kvalitativne vrijednosti (npr. kvaliteta usluge - visoka, srednja, niska i sl.)

potrebno je oblikovati drukcije funkcije korisnosti pregovaranja. Moguca rješenja su kvalitativne i

neizrazite vrijednosti.

8

Page 13: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

5.2.1. Kvalitativne vrijednosti

Funkcija korisnosti definira se izravno nad skupom kvalitativnih vrijednosti. Neka je zadan

skup kvalitativnih vrijednosti Q = {q1, q2, ..., qr} Funkciju korisnosti moguce je sada definirati kao

diskretnu funkciju:

Vj : Q → [0, 1]

5.2.2. Neizrazite vrijednosti

U ovom slucaju elemente ponude definiramo neizrazitim skupovima. Moguce vrijednosti ele-

menata ponude su kontinuirani interval (xj ∈ [minj,maxj]). Težinu kvalitativnih elemenata opet

odredujemo funkcijom Vj : Q → [0, 1]. Kvalitativne vrijednosti elemenata ponude (qk ∈ Q) defi-

nirane su funkcijom pripadnosti µqk . Sada možemo definirati funkciju korisnosti elementa ponude

kao:

Vj(xj) =∑qk∈Q

µqk(xj)Vj(qk)

Slika 5.1: Primjer kvalitativnih vrijednosti prikazanih pomocu skupa neizrazitih vrijednosti

S obzirom na prethodnu sliku skup izrazitih vrijednosti je µq1(xj) = 0.75, µq2(xj) = 0.2, µq3(xj) =

0. zadana je ponuda (q1, q2, q3), pri cemu je Vj(q1) = 0.2, Vj(q2) = 0.5 i Vj(q3) = 0.8. Tada je

korisnost ponude:

Vj(xj) = µq1(xj)Vj(q1) + µq2(xj)Vj(q2) + µq3(xj)Vj(q3)

= 0.75× 0.2 + 0.2× 0.5 + 0× 0.8

= 0.25

5.3. Multilateralno pregovaranje

Model multilateralnog pregovaranja [Faratin et al., 1998] temelji se na nizu medusobnog utjecaja

dviju strana, sa mnogim parametrima pregovaranja. Slijed ponuda i protuponuda naziva se dretva

9

Page 14: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

pregovaranja. Ponude i protuponude generirane su slijedom kombinacija jednostavnih funkcija koje

nazivamo taktikom. Taktike generiraju ponude i protuponude za jednu komponentu objekta prego-

varanja koristeci jednan kriterij (vrijeme, resursi, itd.)

Zadana je dekompozicija skupa agenata A = K ∪ P , pri cemu je K skup klijenata (primatelja

usluga), a P skup poslužitelja (davatelja usluga). Klijenti i poslužitelji u nacelu imaju suprotne inte-

rese (cijena, kvaliteta, kolicina itd.). U manjem broju slucajeva klijenti i poslužitelji imaju zajednicki

interes (takvi elementi ponude automatski poprimaju maksimalnu mogucu vrijednost). Pregovaranje

se uvijek obavlja izmedu dva agenta k ∈ K i p ∈ P

S xta→b oznacavamo vektor elemenata ponude koju je agent a predložio agentu b u trenutku t (radi

jednostavnosti pretpostavlja se diskretno vrijeme T , pri cemu je vrijeme slanja/primanja ponude

0). S xta→b[j] oznacavamo vrijednost elementa ponude j u ponudi xt

p→k. Prihvatljive vrijednosti

elementa ponude j, agenta a su u intervalu [minaj ,maxa

j ].

Dretva pregovaranja izmedu agenata a, b ∈ A, u trenutku t je bilo koja konacni niz oblika

(xt1d1→e1

, xt2d2→e2

, ..., xtndn→en

) pri cemu je:

� ei = di+1 - ponude su naizmjenicne izmedu agenata;

� tk je prije tl ako k 6 l - ponude su vremenski uredene;

� di, ei ∈ {a, b} - dretva sadrži samo ponude agenata a i b;

� di = ei - agent ne nudi sam sebi

� xtidi→ei

[j] ∈ [mindij ,maxdi

j ] ∪ {prihvati, odbij}

Dretvu pregovaranja oznacavamo s xta↔b ili xt

b↔a. Za dretvu pregovaranja kažemo da je aktivna ako

xtndn,en

[j] /∈ {prihvati, odbij} ∀j.

Neka je zadan agent a i njegova funkcija korisnosti V a. Interpretacija ponude xtb→a agenta a u

trenutku t′ (t < t′), definirana je kao:

Ia(t′, xtb→a) =

odbij ako t′ > tamax

prihvati ako V a(xtb→a) > V a(xt′

a→b)

xt′

a→b u protivnom

Pri cemu je xt′

a→b ponuda koju bi agent a ponudio agentu b u trenutku t′, a tamax najkasniji trenutak u

kojem agent a mora završiti pregovor.

10

Page 15: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

6. Višeagentni sustav javne nabave temeljem automatiziranog

pregovaranja

U sklopu diplomskog rada implementiran je višeagentni sustav javne nabave temeljem automa-

tiziranog pregovaranja.

6.1. Motivacija za uvodenje automatiziranog sustava javne nabave

Neke od prednosti uvodenja automatiziranog sustava javne nabave navedene su u uvodu i one su

glavna motivacija za uvodenje takvog sustava.

Motivacija za uvodenje sustava javne nabave temeljem automatiziranog pregovaranja:

� Slican sustav u Republici Hrvatskoj još ne postoji - u Republici Hrvatskoj postoji nekoliko

servisa e-javne nabave te isto tako elektronickih oglasnika gdje ponudaci mogu pratiti stanje

natjecaja, ali takvi sustavi nisu sustavi nisu automatizirani i ne koriste automatizirano pregova-

ranje višeagentnih sustava, nego su implementirani kao jednostavne web aplikacije sa bazom

podataka.

� Velike uštede novca i vremena - znacajnim smanjenjem ljudskog posla i povecanim utje-

cajem automatiziranog sustava, uštedilo bi se na raznim direktnim troškovima obrade, ali i

mnogim indirektnim troškovima na koje ne obracamo toliko pozornosti. Uštede vremena ta-

koder su znacajne zbog brzine rada automatiziranog sustava koji bi mjesece i dane sveo na

svega nekoliko sekundi ili minuta.

� Korupcijski rizici svedeni na minimum - uvodenjem automatiziranog sustava javne nabave

ljudski utjecaj znatno bi se smanjio, a samim time i mogucnost manipulacija i koruptivnih

radnji koje su posebno kriticne u segmentu javne nabave zbog prometa velike kolicine novca.

� Brža realizacija nabave - automatiziranim sustavom javne nabave omogucila bi se izuzetno

brza realizacija javne nabave bez potrebe za raznim komisijama i povjerenstvima za odabir

najboljih ponuda kojima treba prilicno puno vremena za donošenje odluke o odabiru najbolje

ponude.

� Automatizirano pregovaranje omogucuje fleksibilnost - automatiziranim pregovaranjem

omogucuje se fleksibilnost za oba segmenta javne nabave što znaci da ponuda može varirati

ovisno o nacinu pregovaranja i unaprijed zadanim strategijama. Funkcije korisnosti omogu-

cuju davanje važnosti pojedinim parametrima ponude/natjecaja te se u skladu s time obracu-

nava korisnost.

11

Page 16: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

� Poticanje tržišnog natjecanja - uvodenjem automatiziranog sustava javne nabave povecala

bi se korektnost i ravnopravnost svih korisnika sustava te povecala njihova potreba za tržišnim

natjecanjem što dovodi do sveukupne bolje ponude na tržištu

� Ocuvanje okoliša - smanjenjem papirologije direktno se utjece na zaštitu okoliša. Postoje i

mnogi ostali faktori koji utjecu na ocuvanje okoliša kao što su smanjena potreba za prijevozom,

manja potrošnja elektricne energije, itd.

� Bolja preglednost i nadzor nad postupcima javne nabave - automatiziranim sustavom

znatno bi se povecala transparensnost poslovanja i omogucila bolja preglednost nad koris-

nicima javne nabave. Jednostavnim kreiranjem izvještaja moguc je uvid u svako nadmetanje,

njihov status i napredak.

Teško je nabrojiti sve prednosti ovog sustava koje su motivacija za uvodenje. Uvodenjem automa-

tiziranog sustava javne nabave, na dobitku bi bili i narucitelji i ponudaci. Implementacijom sustava

smanjio bi se ljudski utjecaj na minimalni nivo što znaci da bi se smanjile koruptivne radnje koje

predstavljaju veliki problem javne nabave u Hrvatskoj, ali i u Europi i svijetu zbog ogromne kolicine

novca koje se javljaju u javnim nabavama.

6.2. Javna nabava u Republici Hrvatskoj

Prema službenoj definiciji Ministarstva pravosuda RH [Republika Hrvatska Ministarstvo pravo-

suda, 2011]: "Javna nabava obuhvaca skup postupaka koje narucitelji, koji samostalno ne stjecu

financijska sredstva nego su neposredni ili posredni korisnici državnog ili lokalnog proracuna, mo-

raju provesti prije zakljucivanja ugovora o javnoj nabavi roba, radova ili usluga".

Ciljeve javne nabave dijelimo na kratkorocne i dugorocne [Republika Hrvatska, Ministarstvo gos-

podarstva, 2012]:

� kratkorocni ili primarni - racionalno i ucinkovito trošenje proracunskih sredstava

� dugorocni ili sekundarni - pravna sigurnost, sprecavanje korupcije i kriminala, pozitivni

utjecaji na gospodarski razvoj i zapošljavanje (poticanje tržišnog natjecanja, promicanje iz-

vrsnosti), unaprjedenje upravljanja javnim financijama, ocuvanje okoliša i dr.

6.2.1. Segmenti javne nabave

U javnoj nabavi susrecemo dva segmenta. Narucitelj koji predstavlja javni sektor te ponuditelj

koji predstavlja privatni sektor.

Javni narucitelji u Republici Hrvatskoj mogu biti [Republika Hrvatska Ministarstvo pravosuda,

2011]:

12

Page 17: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

� Državna tijela Republike Hrvatske;

� Jedinice lokalne i podrucne(regionalne) samouprave;

� Pravne osobe koje su osnovane za odredene svrhe radi zadovoljavanja potreba u opcem inte-

resu, a koje nemaju industrijski ni trgovacki znacaj;

� Udruge koje su osnovale državna tijela ili jedinice lokalne samouprave.

6.2.2. Postupci javne nabave

Zakon o javnoj nabavi [Hrvatski sabor, 2007] uspostavlja pet postupaka javne nabave:

� otvoreni postupak javne nabave - postupak u kojem svaki zainteresirani gospodarski subjekt

može podnijeti ponudu

� ograniceni postupak javne nabave - postupak u kojem svaki zainteresirani gospodarski su-

bjekt može zatražiti da sudjeluje u postupku, pri cemu samo oni gospodarski subjekti koje

narucitelj pozove mogu podnijeti ponudu

� pregovaracki postupak javne nabave - postupak u kojem se narucitelj obraca gospodarskim

subjektima po vlastitom izboru i dogovara uvjete ugovora s jednim ili više gospodarskih su-

bjekata

� natjecaj - postupak koji omogucava dobivanje plana ili projekta koji je odabrao ocjenjivacki

sud, uglavnom u podrucju prostornog planiranja, arhitekture i graditeljstva, inženjerstva ili

obrade podataka, nakon provedenog natjecaja, s dodjelom ili bez dodjele nagrada

� natjecateljski dijalog - postupak u kojem svaki zainteresirani gospodarski subjekt može za-

tražiti da sudjeluje u postupku, pri cemu narucitelj s natjecateljima primljenim u taj postupak

vodi dijalog s ciljem razvijanja jednog ili više prikladnih rješenja koja mogu udovoljiti njego-

vim zahtjevima

Za nabave velike vrijednosti javni narucitelj može birati izmedu otvorenog i ogranicenog pos-

tupka javne nabave. U posebnim slucajevima i okolnostima smije primijeniti pregovaracki postupak

s prethodnom objavom ili bez prethodne objave, a u posebnim okolnostima može koristiti natjeca-

teljski dijalog.

Za nabave male vrijednosti narucitelji mogu koristiti otvoreni, ograniceni i pregovaracki postu-

pak javne nabave, okvirni sporazum i elektronicku dražbu.

13

Page 18: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

6.2.3. Zakonodavni i institucionalni okvir

Zakonodavni okvir sustava javne nabave u Republici Hrvatskoj cine[Republika Hrvatska Minis-

tarstvo pravosuda, 2011]:

� Zakon o javnoj nabavi (ZJN), - 90/2011 [Hrvatski sabor, 2007] - ovim se Zakonom ureduju

postupci sklapanja ugovora o javnoj nabavi i okvirnih sporazuma radi nabave robe, radova ili

usluga, pravna zaštita u vezi s tim postupcima i nadležnost središnjeg tijela državne uprave

nadležnog za sustav javne nabave;

� Zakon o koncesijama – NN 125/08 [Hrvatski sabor, 2008b]- ovim se Zakonom ureduju pos-

tupci davanja koncesija, ugovor o koncesiji, prestanak koncesije, pravna zaštita u postupcima

davanja koncesije, politika koncesija, te druga pitanja u vezi s koncesijama;

� Zakon o javno-privatnom partnerstvu – NN 129/08 i 55/11 [Hrvatski sabor, 2008a]- ovim

se Zakonom ureduje postupak predlaganja i odobravanja prijedloga projekata javno-privatnog

partnerstva, pracenje provedbe projekata javno-privatnog partnerstva, sadržaj ugovora o javno-

privatnom partnerstvu te nadležnosti Agencije za javno-privatno partnerstvo;

� Zakon o Državnoj komisiji za kontrolu postupaka javne nabave – NN 21/10 [Hrvatski

sabor, 2013]- ovim se Zakonom ureduje nadležnost Državne komisije za kontrolu postupaka

javne nabave i druga pitanja vezana za rad Državne komisije.

6.2.4. Nadležne institucije

Za sustav javne nabave nadležno je nekoliko ministartsva i agencija[Republika Hrvatska Minis-

tarstvo pravosuda, 2011]:

� Ministarstvo gospodarstva , Uprava za sustav javne nabave - analizira provedbu propisa u

podrucju javne nabave te je nadležna za izobrazbu i usavršavanje u javnoj nabavi;

� Ministarstvo financija - nadležno za razvoj, unapredenje i koordinaciju sustava politike kon-

cesija i ocjenu proracunskih rizika u podrucju javno-privatnog partnerstva te vodi Registar

koncesija koji predstavlja cjelovitu elektronicku evidenciju ugovora o svim koncesijama;

� Agencija za javno-privatno partnerstvo - u suradnji s nadležnim tijelima državne uprave

ocjenjuje predložene projekte i donosi mišljenja o projektima koji se mogu provoditi prema

modelu JPP-a;

� Državna komisija za kontrolu postupaka javne nabave - samostalno i neovisno državno

tijelo cija se nadležnost ostvaruje kroz rješavanje žalbi u postupcima javne nabave, postupcima

davanja koncesija te javno-privatnog partnerstva.

14

Page 19: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7. Implementacija automatiziranog sustava javne nabave

U ovom poglavlju bit ce opisana arhitektura sustava javne nabave koji je implementiran u sklopu

ovog rada te uloge pojedinih komponenti i nacin implementacije.

7.1. SPADE platforma

Slika 7.1: SPADE logo1

SPADE (Smart Python multi-Agent Development Environ-

ment) [Gregori et al., 2006] je platforma za razvoj višeagent-

nih sustava bazirana na XMPP/Jabber tehnologiji i pisana u

programskom jeziku Python. Platforma je razvijena 2005. go-

dine na Politehnickom Sveucilištu u Valenciji. Stvorena je kao

dokaz koncepta za testiranje tehnologije za instant poruke (bazirane na XML-u) kao transportnog

protokola za inteligentne agente.

Slika 7.2: Pregled SPADE platforme2

SPADE platforma bazirana je na skupu standarda, a najvažniji medu njima su FIPA 3 i XMP-

P/Jabber 4. Treba naglasiti da je SPADE prva platforma za razvoj višeagentnih sustava temeljena na

XMPP tehnologiji.

1Izvor: https://code.google.com/p/spade2/2Izvor: https://code.google.com/p/spade2/3FIPA (The Foundation for Intelligent Physical Agents) - organizacija za razvoj i sastavljanje standarda za heterogene

i interaktivne te agentno-bazirane sustave4XMPP (Extensible Messaging and Presence Protocol) - komunikacijski protokol baziran na XML-u izvornog naziva

Jabber. Poznat po tome što ga koriste Facebook Chat, Google Chat, i dr.

15

Page 20: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.2. Znacajke

Glavne znacajke SPADE platforme su:

� Razvoj korištenjem Python programskog jezika

� Pokrivenost FIPA standarda

� P2P komunikacija izmedu agenata

� Podržava FIPA-SL i RDF jezike za opis strukturiranih informacija

� Modeli ponašanja: ciklicko, periodicko, jednokratno, aktivno, Jednokratno s vremenskim od-

makom, bazirano na dogadajima

� Podrška za komunikaciju s ostalim agentima korištenjem razlicitih transportnih protokola:

JADE 5 (preko HTTP i XMPP) i SIMBA.

� Web graficko sucelje

7.3. Web graficko sucelje

Web graficko sucelje temelji se na HTTP protokolu i moguc je pristup sa mnogih uredaja. Glavne

znacajke web grafickog sucelja su:

� Sucelje je podesivo kroz predloške

� Svaki agent identificira se kroz QR kod

� Introspekcija agenata

� Njuškanje (sniffer) poruka

� Pretraživanje agenata i usluga

5JADE (Java Agent Development Framework) - java framework za višeagentne sustave

16

Page 21: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.4. Opis arhitekture sustava

Predloženi prototip sustava se sastoji od tri glavne komponente:

� Web sucelje

� Višeagentni sustav

� Baza podataka

7.4.1. Web sucelje

Web sucelje predstavlja najviši sloj automatiziranog sustava te omogucuje interakciju s koris-

nikom. Kada korisnik unese parametre ponude/natjecaja, zapisuju se u bazu i pokrece se agent

specifican za tu ponudu ili natjecaj. Preko web sucelja moguce je pratiti trenutne natjecaje, njihov

status i dobivenu ponudu ukoliko je natjecaj završio. Ponudaci mogu kreirati i pratiti svoje ponude,

njihov status u pregovaranjima itd.

7.4.2. Višeagentni sustav

Višeagentni sustav predstavlja najvažniji dio automatiziranog sustava. Agenti primaju parametre

ponude/natjecaja te sukladno tome pregovaraju s drugim agentima kako bi se izborili za najpovolj-

nije rješenje. Agenti se dijele na dvije osnovne uloga. Uloga narucioca i uloga ponudaca. Agent

narucioca ima ulogu da prati prijavljene ponude i pregovara s njima, dok agent ponudaca prati na-

tjecaje, prijavljuje se na njih i pregovara a agentima narucioca.

7.4.3. Baza podataka

Baza podataka predstavlja temeljni dio aplikacije jer se svi važni podaci za funkcioniranje sus-

tava upisuju i citaju iz baze podataka. Uvidom u bazu podataka, agenti se prijavljuju na odgovarajuce

natjecaje prema prije zadanim kriterijima, a narucitelji odabiru odgovarajuce ponude. U bazu poda-

taka zapisuju rezultati natjecaja kako bi bio omogucen uvid u web aplikaciji.

17

Page 22: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.5. Dijagram prikaza rada sustava

Dijagram jasnije prikazuje funkcionalnost sustava koja je navedena u prijašnjim poglavljima.

Slika 7.3: Dijagram prikaza rada sustava

Jasno se vidi da postoje dvije vrste korisnika (narucitelj i ponudac) koji podatke unose u aplika-

ciju koja ih zatim sprema u bazu podataka i pokrece agenta dajuci mu potrebne parametre za ispravan

rad. Agenti koriste bazu podataka za upis/citanje ponude/natjecaja. Podaci iz baze vidljivi su u web

sucelju.

Svaki agent jednoznacno je identificiran korištenjem kombinacije korisnickog imena, id-a na-

tjecaja/ponude te oznakom "n" za natjecaj i "p" za ponudaca. Nakon završetka natjecaja, graficko

web sucelje prikazuje status natjecaja i dobivenu ponudu citajuci podatke iz baze podataka koju

popunjava agent natjecaja.

18

Page 23: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.6. ERA model

ERA model aplikacije sastoji se od nekoliko tablica, a najvažnije su:

� Natjecaj - sadrži sve bitne podatke vezane uz kreirane natjecaje

� Ponuda - sadrži sve bitne podatke vezane uz kreirane ponuda

� Natjecaj_Ponuda - sadrži podatke vezane uz prijavljene ponude na odredene natjecaje

Osim navedenih, postoje i ostale tablice za spremanje razlicitih vrsta podataka neophodnih za funk-

cioniranje sustava. To su:

� Korisnik - sadrži sve bitne podatke o registriranom korisniku

� Uloga - povezana sa tablicom korisnika, a predstavlja ulogu korisnika u sustavu

� Tvrtka - omogucuje povezivanje korisnika sa tvrtkom

� Glavni_rjecnik - tablica sadrži sve CPV oznake i vezana je uz tablice natjecaja i ponude.

Pretraživanje tablice omoguceno je u web grafickom sucelju.

� Dodatni_rjecnik - sadrži CPV oznake dodatnog rjecnika. U natjecaj i ponudu dodatna oznaka

unosi se samo ukoliko je to potrebno.

� Status - predstavlja status natjecaja ili ponude. Pomocu statusa imamo uvid da li je natjecaj

završen ili je u tijeku. Isto vrijedi i za ponudu. Takoder, status oznacava da li je ponuda

pobijedila u nekon natjecaju.

� Potez - oznacava koji agent je trenutno na potezu za unos ponude. Ova tablica je zamišljena

kao pomoc ukoliko dode do greške u sustavu kako bi se kasnije dogadaj mogao vratiti na

prijašnje stanje.

� Kriterij_odabira - oznacava kriterij odabira neke ponude i vezan je za tablicu natjecaj. Mo-

guci kriteriji odabira su najpovljnija cijena ili ekonomski najpovoljnija ponuda

Na sljedecoj stranici nalazi se kompletan prikaz ERA dijagrama.

19

Page 24: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

Slik

a7.

4:E

RA

dija

gram

sust

ava

20

Page 25: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.7. Natjecaji i ponude

Kako bi proces prijava na natjecaje bio automatiziran, korisnik treba kreirati natjecaj koji ce

provjeravati ima li u bazi ponuda koje su prijavljene na taj natjecaj, odnosno, ponudu koja ce pro-

vjeravati ima li u bazi natjecaja na koje se ponuda može prijaviti.

Kriterij prema kojemu ponudac raspoznaje kompatibilan natjecaj, je CPV oznaka. CPV pred-

stavlja oznaku jedinstvenog rjecnika javne nabave za svaku robu i/ili uslugu[Hrvatski sabor, 2012].

CPV oznaka može se pretražiti unutar aplikacije po kljucnim rijecima. Prikaz forme nalazi se na

sljedecoj slici.

Slika 7.5: Prikaz rezultata pretraživanja unutar aplikacije za traženi pojam "bicikl"

CPV oznaka je razvijena od strane Europske Unije za javnu nabavu. Osnovana je uredbom (EC)

Broj 2195/2002 Europskog parlamenta i Vijeca o Jedinstvenom rjecniku javne nabave (CPV). Valja

naglasiti kako je CPV broj jednak za sve jezike, dok tekstualni opis može varirati.

21

Page 26: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.8. Struktura Jedinstvenog rjecnika javne nabave (CPV)

Uredba o uvjetima primjene Jedinstvenog rjecnika javne nabave (CPV) [Vlada Republike Hrvat-

ske, 2008] donesena u sijecnju 2008. godine nalaže sljedecu strukturu Jedinstvenog rjecnika javne

nabave (CPV):

� CPV se sastoji od glavnog rjecnika i dodatnog rjecnika.

� Glavni se rjecnik temelji na hijerarhijskoj strukturi koja se sastoji od najviše devet znamenki

uz koje se nalazi tekst kojiopisuje vrstu robe, radova ili usluga koji cine predmet nabave.

� Brojcana oznaka Glavnog rjecnika se sastoji od osam znamenki, podijeljenih kako slijedi:

• prve dvije znamenke oznacuju odjeljke (XX000000-Y);

• prve tri znamenke oznacuju skupine (XXX00000-Y):

• prve cetiri znamenke oznacuju razrede (XXXX0000-Y);

• prvih pet znamenki oznacuju kategorije (XXXXX000-Y).

� Svaka od zadnje tri znamenke u Glavnom rjecniku predstavlja precizniju oznaku unutar svake

kategorije.Deveta znamenka Glavnog rjecnika služi za provjeru prethodnih znamenki.

� Dodatni rjecnik se može koristiti za proširenje opisa predmeta nabave. Stavke se sastoje od

alfanumericke oznake, uz koju se nalazi odgovarajuci tekst koji omogucuje podrobniji opis

posebne vrste ili odredišta predmeta nabave koji se nabavlja.

� Alfanumericka oznaka Dodatnog rjecnika se sastoji od:

• prve razine koju cini jednoslovna oznaka podrucja

• druge razine koju cine cetiri znamenke, od kojih prve tri oznacuju pododjeljke, dok zad-

nja znamenka služi za provjeru.

22

Page 27: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.9. Unos natjecaja

Polja za unos natjecaja potrebno je pažljivo ispuniti jer uvelike ovise o ishodu natjecaja i odabira

"bolje" ponude. Izgled forme prikazan je na sljedecoj slici.

Slika 7.6: Prikaz forme natjecaja

Potrebno je obratiti pozornost na neka polja i procitati kratke upute pisane ispod samih polja

za unos. Npr. zbroj korisnosti unosimo u postotcima i logicko je da zbroj treba iznositi 100 inace

natjecaj nece biti unesen. Takoder, ne treba pretjerivati u zahtjevima i unositi pretjeranu korisnost jer

vrlo je moguce da agent nece postici sporazum sa nijednim drugim agentom zbog izuzetno visokih

kriterija. Kod unosa strategije takoder treba obratiti pozornosti i unijeti razumne vrijednosti u obliku

postotka.

23

Page 28: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

Polja koja narucitelj mora ispuniti su:

� CPV glavna oznaka

� CPV dodatna oznaka (ukoliko je potrebno)

� Naziv i istek natjecaja - nakon isteka natjecaja, agent odabire najbolju ponudu i gasi se

� Jedinica mjere

� Najmanja i najveca kolicina - bitno je napomenuti da, ukoliko korisnik ne želi pregovaranje

o kolicini, unese iste vrijednosti

� Procijenjena vrijednost natjecaja i maksimalna vrijednost natjecaja

� Minimalni i maksimalni rok isporuke (u danima)

� Kriterij odabira najbolje ponude - ukoliko korisnik odabere najbolju cijenu bez pregovara-

nja, ne treba unositi funkciju korisnosti, strategiju, minimalnu korisnost te vrijeme pregovara-

nja

� Korisnost - predstavlja davanje važnosti odredenim atributima u postotcima pa tako zbroj

treba iznositi 100

� Strategija - predstavlja promjenu vrijednosti u svakom krugu pregovaranja te povecavanje/-

smanjivanje atributa u skladu s time izraženih u postotku

� Minimalna korisnost - unosi se u obliku postotka i predstavlja najmanju korisnost za prihva-

canje ponuda. Ispod te korisnosti, agent nece prihvacati ponude.

� Kljucne rijeci - predvidene su za bolje pretraživanje natjecaja i ponuda

Natjecaj se zatim unosi u bazu podataka i pokrece se agent zadužen za taj natjecaj cija je uloga pratiti

dospjele ponude te na kraju odabrati najpovoljniju prema od prije zadanim kriterijima. Ukoliko

je kriterij odabira ekonomski najpovoljnija ponuda, tada agent narucitelja pregovara sa agentima

ponudaca te prema navedenim parametrima (korisnost, trajanje pregovaranja, strategija) odgovara

na ponude. Ukoliko je kriterij najpovoljnija ponuda, tada agent odabire najpovoljniju inicijalnu

ponudu bez pregovaranja.

24

Page 29: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.10. Unos ponude

Ponudac treba ispuniti zadana polja na ispravan i pažljiv nacin kako bi agent ispravno pregovarao

i pokušao dobiti što bolje uvjete. Izgled forme prokazan je na sljedecoj slici.

Slika 7.7: Prikaz forme ponude

Pravila za unos su slicna kao i kod unosa natjecaja (p. 5.8.). Ponudac je dužan unijeti postotke

korisnosti, strategiju prema istim kriterijima kao i narucilac.

25

Page 30: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

Polja koja ponudac mora ispuniti su:

� CPV glavna oznaka

� CPV dodatna oznaka (ukoliko je potrebno)

� Naziv i istek ponude - nakon isteka ponude, agent se gasi

� Jedinica mjere

� Najmanja i najveca kolicina za isporuku robe, usluge, itd.

� Najniža i najviša jedinicna cijena - jedinicna cijena predstavlja važnu stavku u kreiranju

korisnosti

� Minimalni i maksimalni rok isporuke (u danima)

� Korisnost - predstavlja davanje važnosti odredenim parametrima u postotcima pa tako zbroj

treba iznositi 100

� Strategija - predstavlja promjenu vrijednosti u svakom krugu pregovaranja te povecavanje/-

smanjivanje atributa u skladu s time izraženih u postotku

� Minimalna korisnost - unosi se u obliku postotka i predstavlja najmanju korisnost za prihva-

canje ponuda. Ispod te korisnosti, agent nece prihvacati ponude.

� Kljucne rijeci - predvidene su za bolje pretraživanje natjecaja i ponuda

Ponuda se unosi u bazu podataka i pokrece se agent koji prati natjecaje na koje je moguca prijava

ponude. Bitno je naglasiti da ponudac unosi najvecu i najmanju kolicinu koju je spreman prodati

te najmanju i najvecu jedinicnu cijenu. Prema tim parametrima se izracunava ponuda odredenu

kolicinu proizvoda koju narucitelj traži.

26

Page 31: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.11. Strategije pregovaranja i njihova implementacija

Agenti su implementirani korištenjem SPADE platforme i Python programskog jezika. Tran-

sakcija se može sastojati od nekoliko vrijednosti (u ovom primjeru 3) iz kojih se racuna korisnost

funkcije i na temelju kojih se racuna protuponuda.

Funkcija korisnosti oznacena je sa V a. Interpretacija ponude xtb→a agenta u intervalu t′(t < t′)

definirana je na sljedeci nacin:

Ia(t′, xtb→a) =

odbij ako t′ > tamax

prihvati ako V a(xtb→a) > V a(xt′

a→b)

inace xt′

a→b

� V a(xt′

a→b) predstavlja ponudu koju bi agent a ponudio agentu b u trenutku t′

� tamax predstavlja najkasniji trenutak u kojem agent a mora završiti pregovor

Transakcija se sastoji od triju vrijednosti (i, j, k) te je svaka vrijednost u intervalu [0, 1]

Funkcije korisnosti agenata su:

V a(i, j, k) = 0.2i− 0.1j + 0.7k

V b(i, j, k) = −0.4i+ 0.3j − 0.3k

U Python-u je gotovo sve realizirano pomocu lista jer zbog jednostavnosti, a ukoliko string nije lista,

rastavlja se i pretvara u listu zbog racunanja. Funkcije korisnosti definirane su na nacin da svaki clan

u listi predstavlja odredenu vrijednost iz (i, j, k). U slucaju agenta A to bi izgledalo ovako:

self.funkcija_korisnosti = [0.2, -0.1, 0.7]

Inicijalne ponude agenata u trenucima t = 0 i t = 1 su:

x0a→b = (0.9, 0.1, 0.9)

x1b→a = (0.1, 0.8, 0.2)

Inicijalne ponude su takoder implementirane vrlo jednostavno pomocu lista. Sljedeci primjer poka-

zuje jednu od inicijalnih ponuda:

self.inicijalna_ponuda = [0.9, 0.1, 0.9]

27

Page 32: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

Strategije ponuda u ovom primjeru definirane su na sljedeci nacin:

Sa(xt) −→ (xt[i]− 0.1, xt[j] + 0.1, xt[k]− 0.2) uz V amin = 0.30

Sb(xt) −→ (xt[i] + 0.2, xt[j]− 0.2, xt[k] + 0.1) uz V bmin = −0.25

Strategije ponuda su implementirane pomocu lista. Sljedeci primjer pokazuje jednu od strategija

ponuda:

self.strategije_ponuda = [-0.1, 0.1, -0.2]

Najkasniji trenuci (u mojem primjeru) za završavanje pregovora su:

tamax = 10

tbmax = 8

Sljedeci primjer pokazuje kako su definirani najkasniji trenuci:

self.t_max = 10

Za primjer cu prikazati prvu iteraciju, a ostale se racunaju analogno i uvijek se provjeravaju

funkcije korisnosti i jednostavno, ukoliko je korisnost naše ponude veca od korisnosti primljene,

tada dajemo protuponudu, a ako je korisnost primljene ponude veca od naše protuponude, tada jed-

nostavno prihvacamo primljenu ponudu i pregovaranje završava.

Interpretacija agenta A ponude x1b→a

V a(0.1, 0.8, 0.2) = 0.2 · 0.1− 0.1 · 0.8 + 0.7 · 0.2 = 0.08

x2a→b = (0.8, 0.2, 0.7)

V a(0.1, 0.8, 0.7) = 0.2 · 0.8− 0.1 · 0.2 + 0.7 · 0.8 = 0.63

Korisnost sljedece ponude je veca od korisnosti primljene ponude, tako da šaljemo protuponudu.

Interpretacija je sljedeca:

Ia(t2, x1b→a)

28

Page 33: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

U Python-u su definirane metode za izracun korisnosti te za izracun strategije, tj. protuponude

na sljedeci nacin:

Metoda korisnost uzima listu primljene ponude te obavlja izracun svakog clana liste primljene po-

nude sa svakim clanom liste iz funkcije korisnosti, a nakon toga zbraja sve rezultate te se tako dobiva

korisnost obiju ponuda.

def Korisnost( self, ponuda ):

tmp = 0

k = 0

if isinstance(ponuda, str):

p = eval(ponuda)

else:

p = ponuda

f = self.funkcija_korisnosti

for i in range(len(p)):

tmp = f[i] * p[i]

k += tmp

return k

Nakon izracuna korisnosti primljene ponnude, potrebno je izracunati vlastitu ponudu pomocu

metode strategija. Ovisno o definiranoj strategiji, svaki clan liste strategije_ponuda se, ovisno o

operaciji, izracunava sa prethodnom ponudom koju smo poslali, a ukoliko smo u prvoj iteraciji, tada

sa inicijalnom ponudom.

def Strategija( self, ponuda ):

tmp = 0

s = []

if isinstance(ponuda, str):

p = eval(ponuda)

else:

p = ponuda

f = self.strategije_ponuda

for i in range(len(p)):

self.tmp = p[i] + f[i]

s.append(round(self.tmp,2))

return s

29

Page 34: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

7.12. Primjer prijave i pregovaranja

Za primjer pregovaranja i prijave koristit ce se javna nabava lož ulja. Na dan 4.3.2013. cijena

litre Lož ulja iznosila je 6.81 kn/l 6.

Tvrtka A nabavlja 4500-5500 litara lož ulja (razlog ne navodenja konkretnog iznosa je poticanje

na pregovaranja) te je procijenjena vrijednost natjecaja 34000 kn a maksimalna moguca cijena iznosi

37400 kn. Raspon roka isporuke krece se od 5 do 30 dana. Kriterij odabira je ekonomski najpovolj-

nija cijena. Korisnost cijena:kolicina:rok isporuke iznosi 50%:30%:20%. Strategija tj. promjena

parametara tijekom pregovora je cijena:kolicina:rok isporuke +2%:-1%:+1%.

Tvrtka B nudi kolicinu 1000 - 10000 litara lož ulja po jedinicnoj cijeni od 5.8 - 7.0 kn uz rok

isporuke od 7 - 40 dana. Korisnost cijena:kolicina:rok isporuke iznosi 40%:40%:20%. Strategija

tj. promjena parametara tijekom pregovora je cijena:kolicina:rok isporuke -1%:0%:-2% što znaci

da ponudac ne pristaje na promijenu kolicine. Najmanju korisnost i vrijeme pregovaranja nece biti

definirani u ovom primjeru kako bi vidjeli pregovaranje do samog završetka.

Kako bi sve jasnije izgledalo, parametri su zapisani u sljedecoj tablici:

Tablica 7.1: Pregled parametara

Agent Parametar Iznos

Natjecaj

Kolicina 4500-5500Procijenjena vrijednost 34000 knMaksimalna vrijednost 37400 knRok isporuke 5-30 danaKorisnost cijene 50%Korisnost kolicine 30%Korisnost roka isporuke 20%Strategija cijene +2%Strategija kolicine -1%Strategija roka isporuke +1%

Ponuda

Kolicina 1000-10000Najmanja jedinicna cijena 5.8 kn/lNajveca jedinicna cijena 7.0 kn/lRok isporuke 7-40 danaKorisnost cijene 50%Korisnost kolicine 30%Korisnost roka isporuke 20%Strategija cijene +2%Strategija kolicine -1%Strategija roka isporuke +1%

6INA - cjenik goriva - http://www.ina.hr/?id=203

30

Page 35: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

Agent ponudaca se prijavljuje na natjecaj pa samim time daje i inicijalnu ponudu. Inicijalna

ponuda predstavlja 100-postotnu korisnost za ponudaca s obzirom na uvjete natjecaja. Naravno,

100% korisnosti za ponudaca znaci gotovo nikakvu korisnost za agenta natjecaja pa on daje svoju

inicijalnu ponudu i tako pocinje proces pregovaranja koji ce detaljno biti sada prikazan.

T0

x0p→n

V a(38500, 5500, 30) = 38500 · 0.4− 5500 · 0.4 + 30 · 0.2 = 17606

Kako je ponudacu u interesu prodati što više roba/usluga po što vecoj kolicini i uz što duži rok

isporuke, inicijalna ponuda (17606) iznosi 100%, a najmanja korisnost iznosila bi prodaju velike

kolicine uz najmanju cijenu i najbrži rok isporuke (14961) tj. 0%. U sljedecim intervalima korisnosti

ce biti prikazane u postotcima radi lakše preglednosti. Dakle, ponudac šalje ponudu kolicine od 5500

(što je maksimalno s obzirom na intevral natjecaja) po najvišoj cijeni od 7 kn/l što iznosi 38500 kn

uz najduži moguci rok isporuke od 30 dana.

T1

x1n→p

V p(31900, 5500, 5) = −31900 · 0.5 + 5500 · 0.3− 5 · 0.2 = −14301

Kako je agentu natjecaja u interesu kupiti što više roba/usluga po što nižoj cijenu i uz što kraci rok

isporuke, inicijalna ponuda (-14301) iznosi 100%, a najmanja korisnost iznosila bi kupnju velike

kolicine uz najvišu cijenu i najduži rok isporuke (-17606) tj. 0%. Dakle, agent natjecaja šalje

ponudu kolicine od 5500 (što je maksimalno s obzirom na intevral natjecaja) po najmanjoj cijeni

agenta od 5.8 kn/l što iznosi 31900 kn uz najkraci moguci rok isporuke od 5 dana.

T2

x2n→p

V n(31900, 5500, 5) = 31900 · 0.4− 5500 · 0.3 + 29.4 · 0.2 = 0.0%

x2p→n = (38115, 5500, 29.4)

V p(38115, 5500, 29.4) = 38115 · 0.4− 5500 · 0.4 + 29.4 · 0.2 = 94.17%

Sljedecu ponudu izracunavamo prema unaprijed unesenoj strategiji (Cijena - 1%, Kolicina +0%,

Rok isporuke - 2%), što primjenjeno na prijašnju ponudu (38500, 5500, 30) iznosi [38115, 5500,

29.4]. Jasno se vidi da je korisnost izracunate ponude mnogo veca od korisnosti ponude natjecaja

koju smo primili pa šaljemo ponudu s korisnošcu od 94.17% agentu natjecaja.

31

Page 36: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

Interpretacija je sljedeca:

Ip(t2, x1n→p) = x2

p→n

T3

x2p→n

V p(38115, 5500, 29.4) = 38115 · 0.5− 5500 · 0.3 + 29.4 · 0.2 = 5.83%

x3n→p = (32538, 5445, 5, 05)

V n(32538, 5445, 5, 05) = −32538 · 0.5 + 5445 · 0.3− 5, 05 · 0.2 = 89.85%

Sljedecu ponudu izracunavamo prema unaprijed unesenoj strategiji (Cijena + 2%, Kolicina - 1%,

Rok isporuke + 1%), što primjenjeno na prijašnju ponudu (31900, 5500, 5) iznosi [32538, 5445,

5,05]. Jasno se vidi da je korisnost izracunate ponude mnogo veca od korisnosti ponude koju smo

primili pa šaljemo ponudu s korisnošcu od 89.85% agentu ponude.

Interpretacija je sljedeca:

In(t3, x2p→n) = x3

n→p

T4

x3n→p

V n(32538, 5445, 5, 05) = 8.82%

x4p→n = (37733, 85, 5500, 28, 81)

V p(37733, 85, 5500, 28, 812) = 88.40%

Ponudu takoder izracunavamo prema strategiji s obzirom na prijašnju ponudu Jasno se vidi da je

korisnost izracunate ponude mnogo veca od korisnosti ponude natjecaja koju smo primili pa šaljemo

ponudu s korisnošcu od 88.40% agentu natjecaja.

Interpretacija je sljedeca:

Ip(t4, x3n→p) = x4

p→n

T5

x4p→n

V p(37733, 85, 5500, 28, 812) = 11.60%

x4n→p = (33188, 76, 5390, 55, 5, 10)

V n(33188, 76, 5390, 55, 5, 1005) = 79.51%

Interpretacija je sljedeca:

In(t5, x4p→n) = x5

n→p

32

Page 37: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

T6

x5n→p

V n(33188, 76, 5390, 55, 5, 1005) = 17.84%

x6p→n = (37356, 51, 5500, 28, 23)

V p(37356, 51, 5500, 28, 23) = 82.69%

Interpretacija je sljedeca:

Ip(t6, x5n→p) = x6

p→n

T7

x6p→n

V p(37356.5115, 5500, 28.23576) = 17.31%

x7n→p = (33852.53, 5336.6445, 5.15)

V n(33852.53, 5336.6445, 5.15) = 68.98%

Interpretacija je sljedeca:

In(t7, x6p→n) = x7

n→p

T8

x7n→p

V n(33852.53, 5336.6445, 5.15) = 27.06%

x8p→n = (36982.94, 5500, 27.67)

V p(36982.94, 5500, 27.67) = 77.04%

Interpretacija je sljedeca:

Ip(t8, x7n→p) = x8

p→n

T9

x8p→n

V p(36982.94, 5500, 27.67) = 22.96%

x9n→p = (34529.58, 5283.27, 5.20)

V n(34529.58, 5283.27, 5.20) = 58.25%

Interpretacija je sljedeca:

In(t9, x8p→n) = x9

n→p

33

Page 38: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

T10

x9n→p

V n(34529.58, 5283.27, 5.20) = 36.49%

x10p→n = (36613.11, 5500, 27.11)

V p(36613.11, 5500, 27.11) = 71.44%

Interpretacija je sljedeca:

Ip(t10, x9n→p) = x10

p→n

T11

x10p→n

V p(36613.11, 5500, 27.11) = 28.56%

x11n→p = (35220.17, 5230.44, 5.25)

V n(35220.17, 5230.44, 5.25) = 47.32%

Interpretacija je sljedeca:

In(t11, x10p→n) = x11

n→p

T12

x11n→p

V n(35220.17, 5230.44, 5.25) = 46.14%

x12p→n = (36246.99, 5500, 26.57)

V p(36246.99, 5500, 26.57) = 65.90%

Interpretacija je sljedeca:

Ip(t12, x11n→p) = x12

p→n

T13

x12p→n

V p(36246.99, 5500, 26.57) = 34.11%

x13n→p = (35924.58, 5178.14, 5, 30)

V n(35924.58, 5178.14, 5, 30) = 36.19%

Interpretacija je sljedeca:

In(t13, x12p→n) = x13

n→p

34

Page 39: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

T14

x13n→p

V n(35924.58, 5178.14, 5, 30) = 56.00%

x14p→n = (35884.51, 5500, 26.04)

V p(35884.51, 5500, 26.04) = 60.42%

Interpretacija je sljedeca:

Ip(t14, x13n→p) = x14

p→n

T15

x14p→n

V p(35884.51, 5500, 26.04) = 39.59%

x15n→p = (36643.07, 5126.36, 5.36)

V n(36643.07, 5126.36, 5.36) = 24.85%

Primjecujemo da je korisnost primljene ponude veca od korisnosti ponude koju bu natjecaj poslao

agentu ponude. U tom slucaju ponuda se prihvaca i pregovori završavaju sa cijenom od 35884.51

kn, 5500 litara i 26.04 dana. Što znaci da cijena po litri iznosi 6.52 kune što je nešto niže od 6.81.

Vidimo da je ponuda u intervalima oba agenta što je vrlo bitno jer u protivnom, agent ciji raspon nije

u skladu s definiranim, prekida pregovaranje.

Korisnost za agenta natjecaja iznosi: 39.59 %

Korisnost za agenta ponude iznosi: 60.42 %

Pregovori su mogli biti i nastavljeni ili prekinuti ranije ukoliko bi postavili T ili minimalnu

korisnost jer vidimo da je agent ponude u ovom primjeru "prošao" prilicno dobro sa korisnošcu od

60.42 %. Strategija pregovora uvelike ovisi o krajnjoj korisnosti.

Bitno je spomenuti da su parametri odabrani kako bi se prikazao primjer pregovaranja. Umjesto

cijene, kolicine i roka isporuke mogli bi dodati još razne parametre, ali za pokazni primjer 3 para-

metra su dovoljna.

Naravno, Agent natjecaja istovremeno pregovara sa više agenata te na kraju natjecaj dobiva agent

cija ponuda ima najvecu korisnost za agenta natjecaja.

U aplikaciji je implementirana mogucnost odabira kriterija bez pregovaranja što znaci da se

ponudaci jave na natjecaj s odredenom ponudom, a odabire se najniža cijena bez pregovaranja.

35

Page 40: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

8. Povezana istraživanja

U ovo poglavlju navest ce se povezana istraživanja koja se bave slicnim podrucjima istraživanja.

Potrebno je naglasiti da potpuno iste tematike nema ni u Hrvatskoj, a ni u svijetu, što ovom radu

da je još vecu vrijednost. Sustav e-javne nabave postoji u mnogim državam svijeta, ali ne u obliku

višeagentnog sustava sa automatiziranim pregovaranjem.

Sustava e-javne nabave implementiran je u Južnoj Koreji 2002. godine [Si Kyung Seong, 2004].

Sustav e-javne nabave prepoznat je kao uspješan od strane vlade. U clanku se opisuju sustavi e-javne

nabave u Koreji, razvoji procesi te faktori za uspješnu implementaciju sustava. Opisane su i uloge

predsjednika, ministara i raznih agencija za koji su široko podržali ideju uvodenja e-nabave davne

2002. godine.

Višeagentni sustav baziran na pregovaranju za opskrbni lanac [Chen et al., 1999] implementiran

je na Sveucilištu Maryland. Autori su Ye Chen, Yun Peng, Tim Finin, Yannis Labrou i Scott Cost.

Opisani su agenti u opskrbnom lancu te donošenje njihovih odluka. Opskrbni lanac implementiran

je kroz agentno pregovaranje. Kada narudžba stigne, porlazi kroz opskrbni lanac kroz automatsko

ili polu-automatsko pregovaranje izmedu agenata. U clanku su dani kratki primjeri i analize prego-

varanja.

Sljedece povezano istraživanje o pregovaranju i kooperaciji u višeagentnoj okolini [Kraus, 1997].

Autor Sarit Kraus sa Sveucilišta Bar llan u Izraelu predstavlja razvoj racunalnih sustava koji su u

mogucnosti suradivati iz raditi zajedno predstavlja kao izazov. Kao primjer sustava koji dobro sura-

duje navode se dijelovi racunala (disk, pisac, procesor, itd.). Primjer inteligentnih sustava ukljucuje

npr. automatizirane agente koji prate elektricno naponsku mrežu, tim robotskih sustava koji djeluju

u neprijateljskim okruženjima, programski agenti koji olakšavaju distribuiran dizajn i inženjering,

distribuirani sustavi za transport i planiranje, internet agenti koji suraduju kako bi pružili ažurne in-

formacije svojim korisnicima. U clanku se navode još strategijski modeli pregovaranja za dijeljenje

resursa i distribuciju zadataka, primjenu klasicne mehanike u velikim agentnim sustavima, primjena

tehnika operacijskih istraživanja te Primjena neformalnih modela ponašanja i društvenih znanosti na

automatiziranim agentima. Istraživanje datira iz 1997. godine te je poprilicno napredno za ono doba

ako uzmemo u obzir razvoj višeagentnih sustava.

Clanak s Londonskog Sveucilišta [Bigham and Du, 2003] govori o pregovarackom pristupu za

kontrolu pokrivenosti mobilne mreže u realnom vremenu. Performanse cijele mobilne mreže su

poboljšane ugovaranjem i oblikovanjem antenskog zracenja oko tzv. "hot spotova". U clanku je

dokazano pregovaranje izmedu baznih stanica vodi prema dogovoru optimalne pokrivenosti koji ima

doseg kroz cijelu mobilnu mrežu. Rezultat pregovaranja bila bi inteligentna mobilna pokrivenost s

obzirom na distribuciju geografskog prometa mreže u realnom vremenu.

36

Page 41: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

9. Zakljucak

Ovim diplomskim radom naglašena je važnost pregovaranja u današnjem poslovanju. Naglasak

je bio na automatiziranom pregovaranju u B2B e-poslovanju koje poprima sve vece razmjere rastom

informacijskih tehnologija i inteligentnih sustava. Višeagentni sustavi omogucuju velike transakcij-

ske i vremenske uštede u poslovanju. Programski agenti u mogucnosti su prilagoditi se razlicitim

okružjima te donositi važne odluke bez potrebe za povratnom informacijom od korisnika.

U sklopu ovog rada implementiran je višeagentni sustav javne nabave temeljem automatiziranog

pregovaranja. Izradom sustava javne nabave temeljem automatiziranog pregovaranja otvaraju se sa-

svim nove mogucnosti. Javna nabava postala bi brža, jeftinija i sigurnija te omogucila ravnopravnije

nadmetanje. Podrucje javne nabave široko je i kompleksno te zahtjeva poseban nadzor i upravljanje

zbog velike kolicine novca. Važno je napomenuti da ovim projektom nije dan sustav koji bi odmah

mogao u komercijalnu upotrebu, vec koncept koji bi odredenim modifikacijama trebalo uskladiti

za svim zakonskim okvirima i standardima kako bi bio potpuno regularan i funkcionalan. Takve

promijene iziskuju ulaganja, ali u usporedbi s kasnijim uštedama, više su nego isplative.

Višeagentni sustav omogucuje gotovo samostalno djelovanje što znaci da radi na strani korisnika

koji je agenta kreirao. Nakon toga, agent samostalno pregovara s drugim agentima obavještavajuci

korisnika u realnom vremenu o trenutnim statusima.

Osim opisa postupka javne nabave i zakonskog okvira te opisa implementacije sustava, u ovom

radu dano je i rješenje problema kvalitativnih vrijednosti u automatiziranom pregovaranju kojeg

rješavamo korištenjem neizrazitih skupova.

Slican sustav u Republici Hrvatskoj, ali i u Svijetu ne postoji. Postoje razne e-javne nabave i u

nekim su zemljama sasvim uobicajene vec nekoliko godina. U Republici Hrvatskoj postoji nekoliko

rješenja za e-javne nabave, ali takvi sustavi ne koriste automatizirano pregovaranje i višeagentne

sustave što znaci da je ovaj sustav zasad jedinstven.

Naglim rastom e-poslovanja, potreba za automatiziranim višeagentnim sustavima rasti ce i u

bližoj buducnosti.

37

Page 42: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

10. Literatura

[1] Bigham, J. and Du, L. (2003). Cooperative negotiation in a multi-agent system for real-time

load balancing.

[2] Chen, Y., Peng, Y., Finin, T., Labrou, Y., Chu, B., Yao, J., Sun, R., Willhelm, B., and Cost,

S. (1999). A negotiation-based multi-agent system for supply chain management. In In Pro-

ceedings of Agents 99 Workshop on Agent Based Decision-Support for Managing the Internet-

Enabled Supply-Chain, pages 15–20.

[3] Curbera, F., Duftler, M., Khalaf, R., Nagy, W., Mukhi, N., and Weerawarana, S. (2002). Unrave-

ling the web services web: An introduction to soap, wsdl, and uddi. IEEE Internet Computing,

6(2):86–93.

[4] Eunson, B. (1994). Negotiation Skills. The communication skills series. John Wiley & Sons

Australia, Limited.

[5] Faratin, P., Sierra, C., and Jennings, N. R. (1998). Negotiation decision functions for autono-

mous agents. International Journal of Robotics and Autonomous Systems, 24:3–4.

[6] Gregori, M. E., Cámara, J. P., and Bada, G. A. (2006). A jabber-based multi-agent system

platform. In Proceedings of the fifth international joint conference on Autonomous agents and

multiagent systems, AAMAS ’06, pages 1282–1284, New York, NY, USA. ACM.

[7] He, M., Jennings, N. R., and fung Leung, H. (2003). On agent-mediated electronic commerce.

IEEE Transactions on Knowledge and Data Engineering, 15:985–1003.

[8] Hrvatski sabor (2007). Zakon o javnoj nabavi. Narodne novine.

[9] Hrvatski sabor (2008a). Zakon o javno privatnom partnerstvu. Narodne novine.

[10] Hrvatski sabor (2008b). Zakon o koncesijama. Narodne novine.

[11] Hrvatski sabor (2012). Pravilnik o primjeni jedinstvenog rjecnika javne nabave (cpv). Narodne

novine.

[12] Hrvatski sabor (2013). Zakon o državnoj komisiji za kontrolu postupaka javne nabave. Na-

rodne novine.

[13] Kaliannan, M. and Awang, H. (2009). Adoption and use of e-government services: a case study

on e-procurement in malaysia. In Proceedings of the 8th WSEAS International Conference

38

Page 43: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

on E-Activities and information security and privacy, E-ACTIVITIES’09/ISP’09, pages 88–

93, Stevens Point, Wisconsin, USA. World Scientific and Engineering Academy and Society

(WSEAS).

[14] Kraus, S. (1997). Negotiation and cooperation in multi-agent environments. Artificial Intelli-

gence, 94:79–97.

[15] Lau, R. Y. (2006). Towards a web services and intelligent agents-based negotiation system for

b2b ecommerce. Department of Information Systems, City University of Hong Kong, Tat Chee

Avenue, Kowloon, Hong Kong, China.

[16] Raïffa, H. (1982). The art and science of negotiation. Belknap Press of Harvard University

Press.

[17] Republika Hrvatska, Ministarstvo gospodarstva (2011). Statisticko godišnje izvješce o javnoj

nabavi za 2011. godinu. Uprava za sustav javne nabave.

[18] Republika Hrvatska, Ministarstvo gospodarstva (2012). Javna nabava. Cefta trade portal.

[19] Republika Hrvatska Ministarstvo pravosuda (2011). Javne nabave. Narodne novine.

[20] Si Kyung Seong, J. Y. L. (2004). Developing E-Procurement Systems: A Case Study on the

Government E-Procurement Systems in Korea. Public Finance and Management.

[21] Vlada Republike Hrvatske (2008). Uredba o uvjetima primjene jedinstvenog rjecnika javne

nabave (cpv). Narodne novine, broj 110/2007.

[22] Woolridge, M. (2002). An Introduction to MultiAgent Systems. John Wiley & Sons, LTD.

39

Page 44: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

11. Prilozi

11.1. PRILOG 1 - Implementacija agenta narucioca

U nastavku je dan izvorni kod agenta narucioca tj. natjecaja koji se sastoji od glavne klase agenta

te potrebnim metodama za izracunavanje trenutne korisnosti, ukupne korisnosti i strategije.

1 #!/usr/bin/env python

2 # -*- coding: utf-8 -*-

3 import sys

4 import spade

5 import psycopg2

6

7 from time import sleep, localtime, strftime

8 from datetime import datetime

9

10 from spade.Agent import Agent

11 from spade.DF import ServiceDescription

12 from spade.Behaviour import OneShotBehaviour, EventBehaviour,

PeriodicBehaviour, ACLTemplate, MessageTemplate

13 from spade.ACLMessage import ACLMessage

14 import logging

15

16 con = None

17

18 try:

19 con = psycopg2.connect(host=’localhost’, dbname=’nabava’, user=’postgres’,

password=’postgres’)

20 cur = con.cursor()

21 print "Connected to database tested !!"

22 con.close()

23

24 except psycopg2.DatabaseError, e:

25 print ’Greška sa spajanjem na bazu !! %s’ % e

26 sys.exit(1)

27

28 class Natjecaj( Agent):

29 class Natjecaj_Agent( PeriodicBehaviour ):

30 def onStart(self):

31 print ’Naziv AGENTA: ’, self.myAgent.naziv

32 logging.basicConfig(filename= self.myAgent.naziv +

’.log’,level=logging.DEBUG,

33 format=’%(asctime)s %(message)s’)

40

Page 45: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

34 self.counter = 0

35

36 def _onTick( self ):

37 print "******************************"

38 print "Vrijeme ["+strftime("%D - %H:%M:%S", localtime())+"]:

Agent[" + self.myAgent.naziv + "]"

39 print ’Brojac: ’, self.counter

40 logging.info(’Provjeravam bazu za ponudama...’)

41 try:

42 con = psycopg2.connect(host=’localhost’, dbname=’nabava’,

user=’postgres’, password=’postgres’)

43 cur = con.cursor()

44 cur.execute("SELECT count(*) FROM natjecaj_ponuda WHERE

natjecajid = %s AND potezid = 1 AND statusid IN(0,1,2)",

(self.myAgent.param1,))

45 num = cur.fetchone()

46 if (num[0] == 0):

47 logging.info(’Trenutno nema ponuda prijavljenih na natjecaj

!!’)

48 else:

49 print "Broj prijavljenih ponuda: ", num[0]

50 logging.info(’Broj prijavljenih ponuda: %s’, num[0])

51 cur.execute("SELECT * FROM natjecaj_ponuda WHERE natjecajid =

%s AND potezid = 1 AND statusid IN(0,1,2)",

(self.myAgent.param1,))

52 rows = cur.fetchall()

53 if (self.myAgent.param2 == str(2)):

54 for row in rows:

55 if (row[5] == 0):

56 cur.execute("SELECT n.najmanja_kolicina,

n.najveca_kolicina, n.procijenjena_vrijednost,

n.maksimalna_vrijednost, n.najmanji_rok_isporuke,

n.najveci_rok_isporuke, p.najmanja_kolicina,

p.najveca_kolicina,

p.najniza_cijena,p.najvisa_cijena,

p.najmanji_rok_isporuke, p.najveci_rok_isporuke,

n.funkcija_korisnosti, np.inicijalna_ponuda_p,

p.agent \

57 FROM natjecaj n, ponuda p,

natjecaj_ponuda np WHERE

n.idnatjecaja = np.natjecajid AND

p.idponude = np.ponudaid AND

n.idnatjecaja = %s AND

41

Page 46: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

p.idponude=%s",

(self.myAgent.param1, row[1]))

58 param = cur.fetchone()

59 in_ponuda = []

60 in_ponuda.append(float(param[1]*param[8]))

61 in_ponuda.append(float(param[1]))

62 in_ponuda.append(float(param[10]))

63 logging.info(’Inicijalna ponuda: %s, ID ponude: %s’

% (in_ponuda, row[1]))

64 cur.execute("UPDATE natjecaj_ponuda SET

inicijalna_ponuda_n = %s, trenutna_ponuda_n = %s,

t = 1, potezid = 2 WHERE natjecajid = %s AND

ponudaid = %s", (in_ponuda, in_ponuda,

self.myAgent.param1, row[1]))

65 con.commit()

66 x1 = param[13].replace("{", "")

67 y1 = x1.replace("}", "")

68 inp = y1.split(’,’)

69 inp1 = float(inp[0])

70 kolicina = float(inp[1])

71 maxrok = float(inp[2])

72 if ( param[10] <= param[4] ):

73 minrok = param[4]

74 else:

75 minrok = param[10]

76 min_kor = self.myAgent.TempKorisnost( param[9],

kolicina, maxrok, param[12] )

77 print "Temp min korisnost: ", min_kor

78

79 max_kor = self.myAgent.TempKorisnost( param[8],

kolicina, minrok, param[12] )

80 print "Temp max korisnost: ", max_kor

81 cijena = kolicina * float(param[8])

82 inip = "{%s,%s,%s}" % (cijena, kolicina, minrok)

83 print ’Initp 2: ’, inip

84 korisnost = self.myAgent.Korisnost( inip, param[12],

min_kor, max_kor, 0 )

85 print "Korisnost u postotcima", korisnost

86 cur.execute("UPDATE natjecaj_ponuda SET

inicijalna_ponuda_n = %s, trenutna_ponuda_n = %s,

t = 1, potezid = 2 WHERE natjecajid = %s AND

ponudaid = %s", (inip, inip, self.myAgent.param1,

row[1]))

42

Page 47: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

87 con.commit()

88 logging.info(’Inicijalna ponuda: %s, ID ponude: %s,

T min korisnost: %s, T max korisnost: %s,

Postoci: %s’ % (in_ponuda, row[1], min_kor,

max_kor, korisnost))

89

90 msg = ACLMessage()

91 primatelj = spade.AID.aid( name= param[14],

addresses=["xmpp://" + param[14]])

92 msg.addReceiver( primatelj )

93 msg.setOntology( ’B2B’ )

94 msg.setContent( inip )

95 self.myAgent.send( msg )

96 else:

97 cur.execute("SELECT np.trenutna_ponuda_p,

np.inicijalna_ponuda_p, np.inicijalna_ponuda_n,

n.funkcija_korisnosti, np.trenutna_ponuda_n,

n.strategija, n.najmanji_rok_isporuke,

p.najmanji_rok_isporuke, p.najniza_cijena,

p.najvisa_cijena, p.agent, n.minimalna_korisnost,

np.t, n.t_max \

98 FROM natjecaj_ponuda np, natjecaj n,

ponuda p WHERE n.idnatjecaja =

np.natjecajid AND p.idponude =

np.ponudaid AND natjecajid = %s AND

ponudaid = %s",

(self.myAgent.param1, row[1]))

99 param = cur.fetchone()

100

101 x1 = param[1].replace("{", "")

102 y1 = x1.replace("}", "")

103 inp = y1.split(’,’)

104 inp1 = float(inp[0])

105 inp2 = float(inp[1])

106 inp3 = float(inp[2])

107

108 x2 = param[2].replace("{", "")

109 y2 = x2.replace("}", "")

110 inn = y2.split(’,’)

111 inn1 = float(inn[0])

112 inn2 = float(inn[1])

113 inn3 = float(inn[2])

114

43

Page 48: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

115 x3 = param[3].replace("{", "")

116 y3 = x3.replace("}", "")

117 fk = y3.split(’,’)

118 fk1 = float(fk[0]) / 100

119 fk2 = float(fk[1]) / 100

120 fk3 = float(fk[2]) / 100

121

122 x4 = param[0].replace("{", "")

123 y4 = x4.replace("}", "")

124 tpp = y4.split(’,’)

125 tpp1 = float(tpp[0])

126 tpp2 = float(tpp[1])

127 tpp3 = float(tpp[2])

128

129 x5 = param[4].replace("{", "")

130 y5 = x5.replace("}", "")

131 tpn = y5.split(’,’)

132 tpn1 = float(tpn[0])

133 tpn2 = float(tpn[1])

134 tpn3 = float(tpn[2])

135

136 if ( param[7] <= param[6] ):

137 minrok = param[6]

138 else:

139 minrok = param[7]

140 min_kor_p = self.myAgent.TempKorisnost( param[9],

tpp2, inp3, param[3] )

141 print "Temp P min korisnost: ", min_kor_p

142

143 print param[8], tpp2, inn3, param[3]

144 max_kor_p = self.myAgent.TempKorisnost( param[8],

tpp2, inn3, param[3] )

145 print "Temp P max korisnost: ", max_kor_p

146

147 korisnost_p = self.myAgent.Korisnost( param[0],

param[3], min_kor_p, max_kor_p, 0 )

148 print "Korisnost u postotcima P ", korisnost_p

149 logging.info(’Trenutna ponuda: %s, ID ponude: %s, T

min korisnost: %s, T max korisnost: %s, Postoci:

%s’ % (param[0], row[1], min_kor_p, max_kor_p,

korisnost_p))

150

151 ponuda_n = self.myAgent.Strategija( param[4],

44

Page 49: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

param[5], 0 )

152 x6 = ponuda_n.replace("{", "")

153 y6 = x6.replace("}", "")

154 tppn = y6.split(’,’)

155 tppn1 = float(tppn[0])

156 tppn2 = float(tppn[1])

157 tppn3 = float(tppn[2])

158 print ponuda_n

159

160 min_kor_n = self.myAgent.TempKorisnost( param[9],

tppn2, inp3, param[3] )

161 print "Temp N min korisnost: ", min_kor_n

162

163 max_kor_n = self.myAgent.TempKorisnost( param[8],

tppn2, inn3, param[3] )

164 print "Temp N max korisnost: ", max_kor_n

165

166 korisnost_n = self.myAgent.Korisnost( ponuda_n,

param[3], min_kor_n, max_kor_n, 0 )

167 print "Korisnost u postotcima N ", korisnost_n

168 logging.info(’Trenutna ponuda: %s, ID ponude: %s, T

min korisnost: %s, T max korisnost: %s, Postoci:

%s’ % (ponuda_n, row[1], min_kor_n, max_kor_n,

korisnost_n))

169 if (korisnost_n > korisnost_p):

170 min_n = float(param[11])/100

171 if ( korisnost_n < float( min_n ) ) or (

int(param[12]) > int(param[13]) ):

172 print "Ponuda je ispod minimalne korisnosti ili

je rok za pregovaranje istekao"

173 logging.info(’Ponuda je ispod minimalne

korisnosti ili je rok za pregovaranje

istekao’)

174 cur.execute("UPDATE natjecaj_ponuda SET

konacna_ponuda = ’ISTEKLO’, statusid = 5,

statusid2 = 8, potezid = 1 WHERE natjecajid =

%s AND ponudaid = %s", (self.myAgent.param1,

row[1]))

175 con.commit()

176 print "Natjecaj > Ponudac"

177 cur.execute("UPDATE natjecaj_ponuda SET

trenutna_ponuda_n = %s, t = t + 1, potezid = 2

WHERE natjecajid = %s AND ponudaid = %s",

45

Page 50: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

(ponuda_n, self.myAgent.param1, row[1]))

178 con.commit()

179

180 print ’Slanje ponude!!’

181 msg = ACLMessage()

182 primatelj = spade.AID.aid( name= param[10],

addresses=["xmpp://" + param[10]])

183 msg.addReceiver( primatelj )

184 msg.setOntology( ’B2B’ )

185 msg.setContent( ponuda_n )

186 self.myAgent.send( msg )

187 logging.info(’Slanje ponude: %s, agentu: %s ’ %

(ponuda_n, primatelj))

188 else:

189 print "Ponudac > Natjecaj"

190 min_n = float(param[11])/100

191 if ( korisnost_p < float( min_n ) ) or (

int(param[12]) > int(param[13]) ):

192 print "Ponuda je ispod minimalne korisnosti ili

je rok za pregovaranje istekao"

193 logging.info(’Ponuda je ispod minimalne

korisnosti ili je rok za pregovaranje

istekao’)

194 cur.execute("UPDATE natjecaj_ponuda SET

konacna_ponuda = ’ISTEKLO’, statusid = 5,

statusid2 = 8, potezid = 1 WHERE natjecajid =

%s AND ponudaid = %s", (self.myAgent.param1,

row[1]))

195 con.commit()

196 d = self.myAgent.Korisnost( param[0], y3,

min_kor_n, max_kor_n, 1 )

197 if (d == 0):

198 cur.execute("UPDATE natjecaj_ponuda SET

konacna_ponuda = ’ISTEKLO’, statusid = 5,

statusid2 = 8, potezid = 1 WHERE natjecajid =

%s AND ponudaid = %s", (self.myAgent.param1,

row[1]))

199 con.commit()

200 else:

201 cur.execute("UPDATE natjecaj_ponuda SET

trenutna_ponuda_n = %s, konacna_ponuda =

trenutna_ponuda_p, statusid = 3, statusid2 =

4, potezid = 1, korisnost = %s WHERE

46

Page 51: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

natjecajid = %s AND ponudaid = %s",

(ponuda_n, korisnost_p, self.myAgent.param1,

row[1]))

202 con.commit()

203 #SLANJE PORUKE param[10]

204 msg = ACLMessage()

205 primatelj = spade.AID.aid( name= param[10],

addresses=["xmpp://" + param[10]])

206 msg.addReceiver( primatelj )

207 msg.setOntology( ’B2B’ )

208 msg.setContent( ’Prihvacam ponudu’ )

209 self.myAgent.send( msg )

210 logging.info(’Prihvacam ponudu: %s, od agenta:

%s’ % (param[0], primatelj))

211 cur.execute("SELECT np.t, n.istek, n.t_max FROM

natjecaj_ponuda np, natjecaj n WHERE n.idnatjecaja =

np.natjecajid AND natjecajid = %s AND ponudaid = %s",

(self.myAgent.param1, row[1]))

212 provjera_s = cur.fetchone()

213 if (provjera_s[0] > provjera_s[2]):

214 print "Natjecaj je istekao !!"

215 cur.execute("UPDATE natjecaj_ponuda SET

konacna_ponuda = ’ISTEKLO’, statusid = 3,

statusid2 = 8, potezid = 1 WHERE natjecajid =

%s AND ponudaid = %s", (self.myAgent.param1,

row[1]))

216 con.commit()

217 else:

218 print "Bez pregovaranja"

219 cur.execute("SELECT istek FROM natjecaj WHERE idnatjecaja =

%s", (self.myAgent.param1,))

220 provjera_i = cur.fetchone()

221 if (provjera_i[0] < datetime.now()):

222 print "Natjecaj istekao..."

223 logging.info(’Natjecaj je istekao’)

224 cur.execute("SELECT natjecajid, ponudaid, konacna_ponuda

FROM natjecaj_ponuda WHERE natjecajid = %s AND statusid

= 2 ORDER BY konacna_ponuda ASC",

(self.myAgent.param1,))

225 rangs = cur.fetchall()

226 i = 0

227 for rang in rangs:

228 if (i == 0):

47

Page 52: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

229 cur.execute("UPDATE natjecaj_ponuda SET statusid =

6, statusid2 = 7 WHERE natjecajid = %s AND

ponudaid = %s", (rang[0], rang[1]))

230 con.commit()

231 i = 1

232 else:

233 cur.execute("UPDATE natjecaj_ponuda SET statusid =

6, statusid2 = 8 WHERE natjecajid = %s AND

ponudaid = %s", (rang[0], rang[1]))

234 con.commit()

235 print "Rangiranje dovršeno"

236 logging.info(’Rangiranje dovrseno’)

237 if con:

238 con.close()

239 self.myAgent.kill()

240 print "Preostalo do isteka", provjera_i[0] - datetime.now()

241 con = psycopg2.connect(host=’localhost’, dbname=’nabava’,

user=’postgres’, password=’postgres’)

242 cur = con.cursor()

243 cur.execute("SELECT istek FROM natjecaj WHERE idnatjecaja = %s",

(self.myAgent.param1,))

244 provjera_s = cur.fetchone()

245 if (provjera_s[0] < datetime.now()):

246 print "RANGIRANJE"

247 cur.execute("UPDATE natjecaj SET statusid = 3 WHERE

idnatjecaja = %s", (self.myAgent.param1,))

248 con.commit()

249 logging.info(’Rangiranje...’)

250 cur.execute("SELECT natjecajid, ponudaid, korisnost FROM

natjecaj_ponuda WHERE natjecajid = %s AND statusid = 3 AND

statusid2 = 4 ORDER BY korisnost DESC",

(self.myAgent.param1,))

251 rangs = cur.fetchall()

252 i = 0

253 for rang in rangs:

254 if (i == 0):

255 cur.execute("UPDATE natjecaj_ponuda SET statusid = 6,

statusid2 = 7 WHERE natjecajid = %s AND ponudaid =

%s", (rang[0], rang[1]))

256 con.commit()

257 print "Natjecaj dobiva ponuda: ", rang[1]

258 logging.info(’Natjecaj dobiva %s’, rang[1])

259 i = 1

48

Page 53: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

260 else:

261 cur.execute("UPDATE natjecaj_ponuda SET statusid = 6,

statusid2 = 8 WHERE natjecajid = %s AND ponudaid =

%s", (rang[0], rang[1]))

262 con.commit()

263 if con:

264 con.close()

265 self.myAgent.kill()

266 except psycopg2.DatabaseError, e:

267 print e.pgerror

268 return False

269 finally:

270 if con:

271 con.close()

272 self.counter = self.counter + 1

273

274 class Natjecaj_Msg( EventBehaviour ):

275 def _process( self ):

276 self.msg = None

277 self.msg = self._receive( True )

278 if self.msg:

279 logging.info(’Primljena ponuda: %s, Agent: %s’ %

(self.msg.content, self.msg.sender))

280

281 def TempKorisnost( self, cijena, kolicina, rok, fkorisnosti ):

282 x3 = fkorisnosti.replace("{", "")

283 y3 = x3.replace("}", "")

284 fk = y3.split(’,’)

285 fk1 = float(fk[0]) / 100

286 fk2 = float(fk[1]) / 100

287 fk3 = float(fk[2]) / 100

288

289 kor = -float(kolicina) * float(cijena) * fk1 + float(kolicina) * fk2 -

float(rok) * fk3

290 return kor

291

292 def Korisnost( self, ponuda, y3, min_kor, max_kor, td ):

293 print "Racunanje KORISNOSTI"

294 a = ponuda.replace("{", "")

295 b = a.replace("}", "")

296 pnd1 = b.split(’,’)

297 a1 = float(pnd1[0])

298 a2 = float(pnd1[1])

49

Page 54: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

299 a3 = float(pnd1[2])

300 f = y3.replace("{", "")

301 y2 = f.replace("}", "")

302 fk = y2.split(’,’)

303 fk1 = float(fk[0]) / 100

304 fk2 = float(fk[1]) / 100

305 fk3 = float(fk[2]) / 100

306 print "-%s * %s + %s * %s - %s * %s" % (a1, fk1, a2, fk2, a3, fk3)

307 kor = - a1 * fk1 + a2 * fk2 - a3 * fk3;

308 korisnost = (kor - min_kor ) / ( max_kor - min_kor )

309

310 if (td == 1):

311 con = psycopg2.connect(host=’localhost’, dbname=’nabava’,

user=’postgres’, password=’postgres’)

312 cur = con.cursor()

313 cur.execute("SELECT najmanja_kolicina, najveca_kolicina,

procijenjena_vrijednost, maksimalna_vrijednost,

najmanji_rok_isporuke, najveci_rok_isporuke FROM natjecaj WHERE

idnatjecaja = %s", (self.param1,))

314 ck = cur.fetchone()

315 if ((ck[0] > a2) or (a2 > ck[1]) or (a1 > ck[3]) or (a3 < ck[4]) or

(a3 > ck[5])):

316 print "PONUDA JE PREVISOKA DOGOVOR NIJE POSTIGNUT - PONUÐAC"

317 return 0

318 else:

319 return korisnost

320

321 def Strategija( self, ponuda, strategija, td ):

322 print "Racunanje STRATEGIJE"

323 print ponuda, strategija

324 a = ponuda.replace("{", "")

325 b = a.replace("}", "")

326 pnd1 = b.split(’,’)

327 a1 = float("%.3f" % float(pnd1[0]))

328 a2 = float("%.3f" % float(pnd1[1]))

329 a3 = float("%.3f" % float(pnd1[2]))

330

331 x = strategija.replace("{", "")

332 y = x.replace("}", "")

333 fk = y.split(’,’)

334 fk1 = float(fk[0])

335 fk2 = float(fk[1])

336 fk3 = float(fk[2])

50

Page 55: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

337

338 p1 = a1 + ( a1 * fk1 )

339 p2 = a2 + ( a2 * fk2 )

340 p3 = a3 + ( a3 * fk3 )

341 ponuda_n = "{%s,%s,%s}" % (p1, p2, p3)

342

343 if td == 1:

344 con = psycopg2.connect(host=’localhost’, dbname=’nabava’,

user=’postgres’, password=’postgres’)

345 cur = con.cursor()

346 cur.execute("SELECT najmanja_kolicina, najveca_kolicina,

procijenjena_vrijednost, maksimalna_vrijednost,

najmanji_rok_isporuke, najveci_rok_isporuke FROM natjecaj WHERE

idnatjecaja = %s", (self.param1,))

347 ck = cur.fetchone()

348 if ((ck[0] > p2) or (p2 > ck[1]) or (p2 > ck[3]) or (p3 < ck[4]) or

(p3 > ck[5])):

349 logging.info(’Ponuda je previsoka, dogovori nije postignut...’)

350 print "PONUDA JE PREVISOKA DOGOVOR NIJE POSTIGNUT"

351 return 0

352 else:

353 return ponuda_n

354

355 def _setup( self ):

356 print "--------------------------"

357 print "Agent NATJECAJ: START!"

358 natjecaj = ACLTemplate()

359 natjecaj.setOntology(’B2B’)

360 m = MessageTemplate( natjecaj )

361 self.addBehaviour( self.Natjecaj_Msg(), m)

362

363 p = self.Natjecaj_Agent( 2 )

364 self.addBehaviour( p, None )

365 def __init__(self, ime, lozinka, parametar1, parametar2):

366 print parametar1

367 print parametar2

368 self.param1 = parametar1

369 self.param2 = parametar2

370 self.naziv = ime

371 Agent.__init__( self, ime, lozinka )

372 self.start()

51

Page 56: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

11.2. PRILOG 2 - Implementacija agenta ponudaca

U nastaku je dan izvorni kod agenta ponudaca. Kao i kod agenta narucioca, izvorni kod se sastoji

od glavne klase agenta ponude te potrebnim metodama za izracunavanje trenutne korisnosti, ukupne

korisnosti i strategije.

1 #!/usr/bin/env python

2 # -*- coding: utf-8 -*-

3 import sys

4 import spade

5 import psycopg2

6

7 from time import sleep, localtime, strftime

8 from datetime import datetime

9

10 from spade.Agent import Agent

11 from spade.DF import ServiceDescription

12 from spade.Behaviour import OneShotBehaviour, EventBehaviour,

PeriodicBehaviour, ACLTemplate, MessageTemplate

13 from spade.ACLMessage import ACLMessage

14 import logging

15

16 con = None

17

18 try:

19

20 con = psycopg2.connect(host=’localhost’, dbname=’nabava’, user=’postgres’,

password=’postgres’)

21 cur = con.cursor()

22 print "Connected to database tested !!"

23 con.close()

24

25 except psycopg2.DatabaseError, e:

26 print ’Greška sa spajanjem na bazu !! %s’ % e

27 sys.exit(1)

28

29 class Ponuda( Agent):

30 class Ponuda_Agent( PeriodicBehaviour ):

31 def onStart(self):

32 print ’Naziv AGENTA: ’, self.myAgent.naziv

33 logging.basicConfig(filename= self.myAgent.naziv +

’.log’,level=logging.DEBUG, format=’%(asctime)s %(message)s’)

34 self.counter = 0

52

Page 57: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

35

36 def _onTick( self ):

37 print "******************************"

38 print "Vrijeme ["+strftime("%D - %H:%M:%S", localtime())+"]:

Agent[" + self.myAgent.naziv + "]"

39 print ’Brojac: ’, self.counter

40 print "Provjeravam bazu za natjecajima..."

41 logging.info(’Provjeravam bazu za natjecajima...’)

42 try:

43 con = psycopg2.connect(host=’localhost’, dbname=’nabava’,

user=’postgres’, password=’postgres’)

44 cur = con.cursor()

45

46 cur.execute("SELECT count(*) FROM natjecaj WHERE glavna_oznaka =

%s AND statusid NOT IN(3,6)", (self.myAgent.param2,))

47 num = cur.fetchone()

48 if (num[0] == 0):

49 print "Trenutno nema natjecaja za prijavu !!"

50 logging.info(’Trenutno nema natjecaja za prijavu !!’)

51 else:

52 print "Broj natjecaja za prijavu: ", num[0]

53 logging.info(’Broj natjecaja za prijavu: %s’, num[0])

54

55 cur.execute("SELECT n.idnatjecaja, n.kriterij_odabiraid,

n.statusid, n.najmanja_kolicina, n.najveca_kolicina,

n.najmanji_rok_isporuke, n.najveci_rok_isporuke,

p.najmanja_kolicina, p.najveca_kolicina,

p.najmanji_rok_isporuke, p.najveci_rok_isporuke,

p.najniza_cijena, p.najvisa_cijena, p.funkcija_korisnosti,

n.agent \

56 FROM natjecaj n, ponuda p WHERE n.glavna_oznaka

= %s AND n.statusid = 1 AND p.idponude = %s

AND ((p.najmanja_kolicina BETWEEN

n.najmanja_kolicina AND n.najveca_kolicina)

OR (p.najveca_kolicina BETWEEN

n.najmanja_kolicina AND n.najveca_kolicina)

OR (n.najmanja_kolicina BETWEEN

p.najmanja_kolicina AND p.najveca_kolicina) \

57 OR (n.najveca_kolicina BETWEEN

p.najmanja_kolicina AND p.najveca_kolicina))

AND ((p.najmanji_rok_isporuke BETWEEN

n.najmanji_rok_isporuke AND

n.najveci_rok_isporuke) OR

53

Page 58: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

(p.najveci_rok_isporuke BETWEEN

n.najmanji_rok_isporuke AND

n.najveci_rok_isporuke) OR

(n.najmanji_rok_isporuke BETWEEN

p.najmanji_rok_isporuke AND

p.najveci_rok_isporuke) \

58 OR (n.najveci_rok_isporuke BETWEEN

p.najmanji_rok_isporuke AND

p.najveci_rok_isporuke))",

(self.myAgent.param2, self.myAgent.param1))

59 rows = cur.fetchall()

60 for row in rows:

61 if(row[1] == 2):

62

63 cur.execute("SELECT COUNT(*) FROM natjecaj_ponuda WHERE

natjecajid = %s AND ponudaid = %s", (row[0],

self.myAgent.param1))

64 numm = cur.fetchone()

65

66 if numm[0] == 0:

67

68 print ’Nema ponude u bazi, racunam inicijalnu ponudu’

69

70 if (row[4] <= row[8]):

71 print ’Unosim najvecu kolicinu natjecaja’

72 kolicina = row[4]

73 else:

74 print ’Unosim našu najvecu kolicinu’

75 kolicina = row[8]

76

77 if (row[6] <= row[10]):

78 print ’Unosim najvecu rok isporuke natjecaja’

79 rok = row[6]

80 else:

81 print ’Unosim naš najveci rok isporuke’

82 rok = row[10]

83 if ( row[9] <= row[5] ):

84 minrok = row[5]

85 else:

86 minrok = row[9]

87

88 cijena = float("%.3f" % float(kolicina * row[12]))

89

54

Page 59: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

90 inip = "{%s,%s,%s}" % (cijena, kolicina, rok)

91 print row[0], self.myAgent.param1, inip

92

93 print "slanje"

94 msg = ACLMessage()

95 primatelj = spade.AID.aid( name= row[14],

addresses=["xmpp://" + row[14]])

96 msg.addReceiver( primatelj )

97 msg.setOntology( ’B2B’ )

98 msg.setContent( inip )

99 self.myAgent.send( msg )

100 cur.execute("INSERT INTO natjecaj_ponuda(natjecajid,

ponudaid, inicijalna_ponuda_p, trenutna_ponuda_p, t,

statusid, potezid) VALUES(%s, %s, %s, %s, 0, 0, 1)",

(row[0], self.myAgent.param1, inip, inip))

101 con.commit()

102

103 min_kor = self.myAgent.TempKorisnost( row[11], kolicina,

minrok, row[13] )

104 print "Temp min korisnost: ", min_kor

105

106 max_kor = self.myAgent.TempKorisnost( row[12], kolicina,

rok, row[13] )

107 print "Temp max korisnost: ", max_kor

108

109 korisnost = self.myAgent.Korisnost( inip, row[13],

min_kor, max_kor, 0 )

110 print "Korisnost u postotcima", korisnost

111 logging.info(’Inicijalna ponuda: %s, ID natjecaja: %s, T

min korisnost: %s, T max korisnost: %s, Postoci: %s’

% (inip, row[0], min_kor, max_kor, korisnost))

112 else:

113 print ’Ponuda je u bazi, ceka se potez i unos

protuponude’

114 cur.execute("SELECT * FROM natjecaj_ponuda WHERE

natjecajid = %s AND ponudaid = %s", (row[0],

self.myAgent.param1))

115 pon = cur.fetchone()

116

117 if pon[8] == 2:

118 print ’mi smo na redu’

119 cur.execute("SELECT np.trenutna_ponuda_n,

np.inicijalna_ponuda_n, np.inicijalna_ponuda_p,

55

Page 60: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

p.funkcija_korisnosti, np.trenutna_ponuda_p,

p.strategija, p.najniza_cijena, p.najvisa_cijena,

n.agent, p.minimalna_korisnost, np.t, p.t_max \

120 FROM natjecaj_ponuda np, ponuda p,

natjecaj n \

121 WHERE p.idponude = np.ponudaid AND

n.idnatjecaja = np.natjecajid \

122 AND natjecajid = %s AND ponudaid = %s",

(row[0], self.myAgent.param1))

123 param = cur.fetchone()

124 x1 = param[1].replace("{", "")

125 y1 = x1.replace("}", "")

126 inp = y1.split(’,’)

127 inp1 = float(inp[0])

128 inp2 = float(inp[1])

129 inp3 = float(inp[2])

130

131 x2 = param[2].replace("{", "")

132 y2 = x2.replace("}", "")

133 inn = y2.split(’,’)

134 inn1 = float(inn[0])

135 inn2 = float(inn[1])

136 inn3 = float(inn[2])

137

138 x3 = param[3].replace("{", "")

139 y3 = x3.replace("}", "")

140 fk = y3.split(’,’)

141 fk1 = float(fk[0]) / 100

142 fk2 = float(fk[1]) / 100

143 fk3 = float(fk[2]) / 100

144

145 x4 = param[0].replace("{", "")

146 y4 = x4.replace("}", "")

147 tpn = y4.split(’,’)

148 tpn1 = float(tpn[0])

149 tpn2 = float(tpn[1])

150 tpn3 = float(tpn[2])

151

152 x5 = param[4].replace("{", "")

153 y5 = x5.replace("}", "")

154 tpp = y5.split(’,’)

155 tpp1 = float(tpp[0])

156 tpp2 = float(tpp[1])

56

Page 61: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

157 tpp3 = float(tpp[2])

158

159 if ( row[9] <= row[5] ):

160 minrok = row[5]

161 else:

162 minrok = row[9]

163

164 min_kor_n = self.myAgent.TempKorisnost( row[11], tpn2,

minrok, row[13] )

165 print "Temp N min korisnost: ", min_kor_n

166

167 max_kor_n = self.myAgent.TempKorisnost( row[12], tpn2,

inn3, row[13] )

168 print "Temp N max korisnost: ", max_kor_n

169

170 korisnost_n = self.myAgent.Korisnost( param[0],

param[3], min_kor_n, max_kor_n, 0 )

171 print "Korisnost u postotcima N ", korisnost_n

172 logging.info(’Trenutna ponuda: %s, ID natjecaja: %s, T

min korisnost: %s, T max korisnost: %s, Postoci:

%s’ % (param[0], row[0], min_kor_n, max_kor_n,

korisnost_n))

173

174 ponuda_p = self.myAgent.Strategija( param[4],

param[5], 0 )

175 x6 = ponuda_p.replace("{", "")

176 y6 = x6.replace("}", "")

177 tppp = y6.split(’,’)

178 tppp1 = float(tppp[0])

179 tppp2 = float(tppp[1])

180 tppp3 = float(tppp[2])

181

182

183 min_kor_p = self.myAgent.TempKorisnost( row[11],

tppp2, minrok, row[13] )

184 print "Temp P min korisnost: ", min_kor_p

185

186 max_kor_p = self.myAgent.TempKorisnost( row[12],

tppp2, inn3, row[13] )

187 print "Temp P max korisnost: ", max_kor_p

188

189 korisnost_p = self.myAgent.Korisnost( ponuda_p,

param[3], min_kor_p, max_kor_p, 0 )

57

Page 62: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

190 print "Korisnost u postotcima P ", korisnost_p

191 logging.info(’Trenutna ponuda: %s, ID natjecaja: %s, T

min korisnost: %s, T max korisnost: %s, Postoci:

%s’ % (ponuda_p, row[0], min_kor_p, max_kor_p,

korisnost_p))

192

193 if (korisnost_p > korisnost_n):

194 min_p = float(param[9])/100

195 if ( korisnost_p < float(min_p) ) or (

int(param[10]) > int(param[11]) ):

196 print "Ponuda je ispod minimalne korisnosti ili je

rok za pregovaranje istekao"

197 logging.info(’Ponuda je ispod minimalne korisnosti

ili je rok za pregovaranje istekao’)

198 cur.execute("UPDATE natjecaj_ponuda SET

konacna_ponuda = ’ISTEKLO’, statusid = 5,

statusid2 = 8, potezid = 1 WHERE natjecajid =

%s AND ponudaid = %s", (row[0],

self.myAgent.param1))

199 con.commit()

200 print "Ponudac > Natjecaj"

201 cur.execute("UPDATE natjecaj_ponuda SET

trenutna_ponuda_p = %s, t = t + 1, potezid = 1

WHERE natjecajid = %s AND ponudaid = %s",

(ponuda_p, row[0], self.myAgent.param1))

202 con.commit()

203

204 msg = ACLMessage()

205 primatelj = spade.AID.aid( name = row[14],

addresses=["xmpp://" + row[14]])

206 msg.addReceiver( primatelj )

207 msg.setOntology( ’B2B’ )

208 msg.setContent( ponuda_p )

209 self.myAgent.send( msg )

210 logging.info(’Slanje ponude: %s, agentu: %s ’ %

(ponuda_p, primatelj))

211 else:

212 print "Natjecaj > Ponudac"

213 min_p = float(param[9])/100

214 if ( korisnost_n < float(min_p) ) or (

int(param[10]) > int(param[11]) ):

215 print "Ponuda je ispod minimalne korisnosti ili je

rok za pregovaranje istekao"

58

Page 63: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

216 logging.info(’Ponuda je ispod minimalne korisnosti

ili je rok za pregovaranje istekao’)

217 cur.execute("UPDATE natjecaj_ponuda SET

konacna_ponuda = ’ISTEKLO’, statusid = 5,

statusid2 = 8, potezid = 1 WHERE natjecajid =

%s AND ponudaid = %s", (row[0],

self.myAgent.param1))

218 con.commit()

219 d = self.myAgent.Korisnost( param[0], y3, min_kor_n,

max_kor_n, 1 )

220 f = self.myAgent.Korisnost( ponuda_p, y3, min_kor_p,

max_kor_p, 1 )

221 if (d == 0) or (f == 0):

222 cur.execute("UPDATE natjecaj_ponuda SET

konacna_ponuda = ’ISTEKLO’, statusid = 5,

statusid2 = 8, potezid = 1 WHERE natjecajid =

%s AND ponudaid = %s", (row[0],

self.myAgent.param1))

223 con.commit()

224 else:

225 cur.execute("UPDATE natjecaj_ponuda SET

trenutna_ponuda_p = %s, konacna_ponuda =

trenutna_ponuda_n, statusid = 3, statusid2 = 4,

potezid = 2, korisnost = %s WHERE natjecajid =

%s AND ponudaid = %s", (ponuda_p, korisnost_n,

row[0], self.myAgent.param1))

226 con.commit()

227 msg = ACLMessage()

228 primatelj = spade.AID.aid( name = row[14],

addresses=["xmpp://" + row[14]])

229 msg.addReceiver( primatelj )

230 msg.setOntology( ’B2B’ )

231 msg.setContent( ’Prihvacam ponudu’ )

232 self.myAgent.send( msg )

233 logging.info(’Prihvacam ponudu: %s, od agenta: %s’

% (param[0], primatelj))

234 else:

235 print ’Ponudac nije na redu ili ponuda nije važeca’

236 logging.info(’Ponudac nije na redu ili ponuda nije

važeca’)

237 cur.execute("SELECT np.t, p.istek, p.t_max FROM

natjecaj_ponuda np, ponuda p WHERE p.idponude =

np.ponudaid AND natjecajid = %s AND ponudaid = %s",

59

Page 64: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

(row[0], self.myAgent.param1))

238 provjera_s = cur.fetchone()

239 if (provjera_s[1] < datetime.now()):

240 print "Ponuda je istekla !!"

241 if con:

242 con.close()

243 self.myAgent.kill()

244 else:

245 print "Bez pregovaranja"

246 cur.execute("SELECT COUNT(*) FROM natjecaj_ponuda WHERE

natjecajid = %s AND ponudaid = %s", (row[0],

self.myAgent.param1))

247 numm = cur.fetchone()

248

249 if numm[0] == 0:

250 if (row[7] <= row[4] <= row[8]):

251 print "Kolicina je u našem intervalu"

252 cijena = row[4] * row[11]

253 kolicina = row[4]

254 rok = row[9]

255 ponuda = "{%s,%s,%s}" % (cijena, kolicina, rok)

256 print ponuda

257 cur.execute("INSERT INTO natjecaj_ponuda(natjecajid,

ponudaid, trenutna_ponuda_p, konacna_ponuda, t,

statusid, potezid) VALUES(%s, %s, %s, %s, 1, 2, 1)

", (row[0], self.myAgent.param1, ponuda, cijena))

258 con.commit()

259 else:

260 print "Ponudu nije moguce unijeti zbog kolicine"

261 else:

262 print "Ponuda je vec u bazi, ceka se odgovor"

263

264 except psycopg2.DatabaseError, e:

265 print e.pgerror

266 return False

267 finally:

268 if con:

269 con.close()

270 self.counter = self.counter + 1

271 class Ponuda_Msg( EventBehaviour ):

272 def _process( self ):

273 self.msg = None

274 self.msg = self._receive( True )

60

Page 65: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

275 if self.msg:

276 logging.info(’Primljena ponuda: %s, Agent: %s’ %

(self.msg.content, self.msg.sender))

277

278 def TempKorisnost( self, cijena, kolicina, rok, fkorisnosti ):

279 x3 = fkorisnosti.replace("{", "")

280 y3 = x3.replace("}", "")

281 fk = y3.split(’,’)

282 fk1 = float(fk[0]) / 100

283 fk2 = float(fk[1]) / 100

284 fk3 = float(fk[2]) / 100

285 kor = float(kolicina) * float(cijena) * fk1 + float(kolicina) * fk2 +

float(rok) * fk3

286 return kor

287

288 def Korisnost( self, ponuda, y3, min_kor, max_kor, td ):

289 print"Racunanje KORISNOSTI"

290 a = ponuda.replace("{", "")

291 b = a.replace("}", "")

292 pnd1 = b.split(’,’)

293 a1 = float(pnd1[0])

294 a2 = float(pnd1[1])

295 a3 = float(pnd1[2])

296 f = y3.replace("{", "")

297 y2 = f.replace("}", "")

298 fk = y2.split(’,’)

299 fk1 = float(fk[0]) / 100

300 fk2 = float(fk[1]) / 100

301 fk3 = float(fk[2]) / 100

302 print "%s * %s + %s * %s + %s * %s" % (a1, fk1, a2, fk2, a3, fk3)

303 kor = a1 * fk1 + a2 * fk2 + a3 * fk3

304 print min_kor, max_kor

305 korisnost = (kor - min_kor ) / ( max_kor - min_kor )

306 if (td == 1):

307 con = psycopg2.connect(host=’localhost’, dbname=’nabava’,

user=’postgres’, password=’postgres’)

308 cur = con.cursor()

309 cur.execute("SELECT najmanja_kolicina, najveca_kolicina,

najniza_cijena, najvisa_cijena, najmanji_rok_isporuke,

najveci_rok_isporuke FROM ponuda WHERE idponude = %s",

(self.param1,))

310 ck = cur.fetchone()

311 if ((ck[0] > a2) or (a2 > ck[1]) or (a1 > ck[3]) or (a3 < ck[4]) or

61

Page 66: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

(a3 > ck[5])):

312 print "PONUDA JE PRENISKA DOGOVOR NIJE POSTIGNUT - PONUÐAC"

313 return 0

314 else:

315 return korisnost

316

317 def Strategija( self, ponuda, strategija, td ):

318 print"Racunanje STRATEGIJE"

319 a = ponuda.replace("{", "")

320 b = a.replace("}", "")

321 pnd1 = b.split(’,’)

322 a1 = float("%.3f" % float(pnd1[0]))

323 a2 = float("%.3f" % float(pnd1[1]))

324 a3 = float("%.3f" % float(pnd1[2]))

325 x = strategija.replace("{", "")

326 y = x.replace("}", "")

327 fk = y.split(’,’)

328 fk1 = float(fk[0])

329 fk2 = float(fk[1])

330 fk3 = float(fk[2])

331 p1 = a1 + ( a1 * fk1 )

332 p2 = a2 + ( a2 * fk2 )

333 p3 = a3 + ( a3 * fk3 )

334 ponuda_p = "{%s,%s,%s}" % (p1, p2, p3)

335 if (td == 1):

336 con = psycopg2.connect(host=’localhost’, dbname=’nabava’,

user=’postgres’, password=’postgres’)

337 cur = con.cursor()

338 cur.execute("SELECT najmanja_kolicina, najveca_kolicina,

najniza_cijena, najvisa_cijena, najmanji_rok_isporuke,

najveci_rok_isporuke FROM ponuda WHERE idponude = %s",

(self.param1,))

339 ck = cur.fetchone()

340 if ((ck[0] > p2) or (p2 > ck[1]) or (ck[2] > p1/p2 ) or (p3 < ck[4])

or (p3 > ck[5])):

341 print "PONUDA JE PRENISKA DOGOVOR NIJE POSTIGNUT"

342 return 0

343 else:

344 return ponuda_p

345

346 def _setup( self ):

347 print "--------------------------"

348 print "Agent PONUDA: START!"

62

Page 67: VIŠEAGENTNI SUSTAV ZA B2B PREGOVARANJE

349 ponuda = ACLTemplate()

350 ponuda.setOntology(’B2B’)

351 m = MessageTemplate( ponuda )

352 self.addBehaviour( self.Ponuda_Msg(), m)

353

354 p = self.Ponuda_Agent( 3 )

355 self.addBehaviour( p, None )

356

357 def __init__(self, ime, lozinka, parametar1, parametar2):

358 print parametar1

359 print parametar2

360 self.param1 = parametar1

361 self.param2 = parametar2

362 self.naziv = ime

363 spade.Agent.Agent.__init__( self, ime, lozinka )

364 #self._setup()

365 self.start()

63