• Nem Talált Eredményt

MAGYAR TUDOMÁNYOS AKADÉMIA SZÁMÍTÁSTECHNIKÁI ÉS AUTOMATIZÁLÁSI KUTATÓ INTÉZETE

N/A
N/A
Protected

Academic year: 2022

Ossza meg "MAGYAR TUDOMÁNYOS AKADÉMIA SZÁMÍTÁSTECHNIKÁI ÉS AUTOMATIZÁLÁSI KUTATÓ INTÉZETE"

Copied!
120
0
0

Teljes szövegt

(1)
(2)
(3)

LOGIKAI A L A P Ú PROGRAMOZÁSI M Ó D S Z E R E K ËS A L K A L M A Z Á S A I K S Z Á M Í T Ó G É P P E L S E G Í T E T T É P Í TÉSZETI TERVEZÉSI

F E L A D A T O K M E G O L D Á S Á H O Z

Irta :

MÁRKUSZ ZSUZSANNA

Tanulmányok 124/1981

(4)

ISBN 963 311 121 8 ISSN 0324 2951

(5)

1. BEVEZETES. . . 5 2. A LOGIKAI PROGRAMOZÁS ÉS AZ ÉPÍTÉSZETI CAD íe 2.1. A PROLOG RÖVID I S M E R T E T É S E . . . 16 2.2. A PROLOG S A J Á T O S S Á G A I N A K F E L H A S Z N Á L Á S A

A Z É P Í TÉSZETI T E R V E Z É S M O D E L L E Z É S É B E N 19 2 .2.1

Paneles lakásalaprajz variációkat

tervező program ... 21

2 .2.2

Programozási elvek, megoldások,

f o g á s o k

. . . 32

3. LOGIKAI ALAPÚ PROGRAMOK KOMPLEXITÁSA . . . 48 3.1. A K O M P L E X I T Á S S Z Á M Í T Á S . . .

48

3.2. P R I M L O G - A PROLOG EG Y M E G S Z O R Í T Á S A 52

3.3. L O K Á L I S ÉS G L O BÁLIS K O M P L E X I T Á S M U T A ­

T Ó K B E V E Z E T É S E . . . 6 3

3.3.1. A program tervezés komplexitása,

szemantikus hibák ... 63 3.3.2. PROLOG programok komplexitás

m é r t é k e i ... 6 7 3.3.3. A komplexitás mutatók alkalmazá­

sa egy CAD program három válto­

zatának kiértékeléséhez . . . . 71

A. A LOGIKAI PROGRAMOZÁS ALKALMAZÁSA TÖBBSZIN­

TES LAKÓÉPÜLET TERVEZÉSI RENDSZERÉHEZ . . . 75

A.l. A P R O G R A M F E L A D A T A . . . 75

A.2. A L A K Ó É P Ü L E T TERVEZÉSI REN D S Z E R E /

A D A T B Á Z I S / S T R U K T Ú R Á K . . . 76

(6)

O L D A L

4.3, A P R O G R A M R E N D S Z E R RÉSZEI . . . 81

4.3.1. Egyéni igényeket kielégitó lakás­

alaprajz variációkat tervező prog­

ram /FLAT/ ... 82 4.3.2. A lakás variációk prioritási sor­

rendjének kialakítását végző prog­

ram / O R D / ... 85 4.3.3. A tervezendő épület vertikális szer­

kezetét kialakitó program /BUILD/ 86 4.3.4. A lakóépület szintenkénti alapraj­

zi elrendezését tervező program

/ T O T A L / ... ... 86

4.4, FUTÁSI A D A T O K . . . Ю О

4.5, A P R O G R A M R E N D S Z E R K O M P L E X I T Á S A . . . Ю 4

5. ÖSSZEFOGALALÁS. . . ю ?

6, IRODALMOJEGYZÉK. . . n o

(7)

1. BEVEZETÉS

A tanulmány tárgya a számitógéppel segített építésze­

ti tervezés egy alapjaiban u j , a matematikai logika eszközeit használó módszere, és annak alkalmazása. A PROLOG uj elvű, logikai alapú programozási nyelv se­

gítségével kidolgoztuk többszintes lakóépületek terve­

zésének modellezését, számítógéppel megoldottunk eddig nem formalizált építészeti bonyolultságának vizsgálatá­

val pedig olyan programozás-módszertani elveket fej­

lesztettünk ki, amelyek hatékonyan alkalmazhatók a g y a ­ korlati programozási munkában.

A bevezetés további részében a tárgykört érintő alap­

fogalmakról írunk, ismertetjük az eddig elért legfon­

tosabb eredményeket. A második fejezetben megmutatjuk, hogy mit és miért lehet PROLOG-ban programozni a szá­

mítógéppel segitett építészeti tervezés területén, a harmadikban pedig azt, hogy hogyan érdemes. A negyedik

fejezetben ismertetünk egy, a gyakorlati igényeket k i e ­ légítő komplex programrendszert.

* * *

(8)

A бо-as években a hardware eszközök rohamos fejlődésé­

vel párhuzamosan egyre összetettebb, magasabbrendu tu­

dásreprezentációt és feladat-megoldó képességet kíván­

tak a számitógépre ráruházni, ami a rendelkezésre álló software eszközök segítségével igen nehézkesnek, néhol lehetetlennek bizonyult. Ezért Nyugat-Európa és az Egyesült Államok több számítástudományi központjában kezdtek el dolgozni olyan emberközeli, "nagyon magas szintű" (új elvű) programozási nyelvek definiálásán és megvalósitásán, amelyek alapjaiban különböznek a hagyományos algoritmikus nyelvektől. Â PROLOG ilyen új elvű, a mesterséges intelligencia kutatások kere­

tein belül kifejlesztett programozási nyelv.

Az új elvű programozási nyelvekkel szemben támasztott követelményeket a következő öt pontban foglaljuk össze

[47]:

1. Az új elvű programozási nyelven csak a lényeget kelljen megfogalmazni, vagyis a nyelv adjon lehető­

séget arra, hogy a programozó csak a számára lényeges kérdéseket döntse el, és a lényegteleneket hagyja nyitva - a "mit" kényelmes megfogalmazása;

2. A nyelv biztosítson lehetőséget a programozónak arra, hogy a megoldás algoritmusára vonatkozó m ó d ­ szertani, azaz vezérlési információkat adhasson - lehetőség a "hogyan" megadására;

(9)

3. A fenti két funkció ne keveredjen, azaz világosan elkülöníthető legyen a feladat definiálása, a "mit"

és a megoldás algoritmusa a "hogyan".( A jelenleg elterjedt algoritmikus nyelveknél pl. ALGOL, FORTRAN, P L /1 ez a két funkció teljesen összeolvad. A prog­

ramozó a megoldás algoritmusán keresztül definiálja a megoldandó problémát.);

4. A nyelvnek legyen explicit, precizen definiált, matematikai eszközökkel jól kezelhető szemantikája;

5. A nyelv legyen "hivatkozási átlátszó", azaz a nyelv szintaxisa megfelelően tükrözze a szemantikát, azaz a "jelentés" minden árnyalatát.

Több ilyen új elvű, vagy "nagyon magas szintű" nyelv született, amelyek közül a legjelentősebbek az USA-ban elterjedt LISP alapú nyelvek, a lambda kalkulusra épü­

lő QLISP [42], PLANNER [3], QA4 [9], POPLER [8], és az Európábam kidolgozott logikai alapú nyelvek, mint a ABSYS [lo}, ABSET [11], és a PROLOG.

A LISP alapú nyelvek kissé nehézkes szintaxis-sal ren­

delkeznek, nincs mindegyiknek kellő pontossággal defi­

niált szemantikája, s alkalmazási területeik is jobbá­

ra a mesterséges intelligencia kutatások keretei között m a r a d t a k .

A legsikeresebb, és a legigéretesebb uj elvű nyelvek a PLANNER és a PROLOG.

(10)

A PROLOG a matematikai logika legjobban kidolgozott nyelvére, az elsőrendű predikátum kalkulusra épül.

Egy PROLOG Droaram speciális elsőrendű formulák, a u.n. Horn-klózok halmaza, igy a nyelv szintaxisa a predikátum kalkulus szintaxisának egy leszűkitése, és szemantikája precízen definiált. A PROLOG egy olyan programozási nyelv, amely szinte teljesen ele­

get tesz az új elvű nyelvekkel szemben támasztott a fent emlitett öt pontban összefoglalt követelmények­

nek. Alkalmazási területe egyre szélesedő, kérdés­

válasz rendszerek, programgenerálás, természetes nyelv megértés feladatain kivül egyre több műszaki alkal­

mazásával is találkozhatunk. [7, 29, 3o, 31, 43].

Azok a feladatok, amelyekre nem komplikált matematikai formulák kiszámítása, hanem a logikai döntések soro­

zata jellemző (pl. meghatározott funkcionális és struk­

turális igényeket kielégítő lakásalaprajz tervezése), tömören és pontosan megfogalmazhatók a logika nyelvén«

Éppigy leirható a feladat világa is, amely azon adott­

ságok és követelmények rendszere, amelyeket figyelembe kell Csenni a feladat megoldása során. A feladat világát axiómákkal, ill, definíciókkal lehet megadni, míg maga a feladat bizonyítandó tételnek fogható fel. Az igy kialakított rendszer elsőrendű predikátum kalkulusban megfogalmazva alkotja magát a számitógépes programot.

Tehát egy feladat kijelölése és a feladat világának kellő pontosságú logikai definiálása elegendő a számitógépes program Írásához. Ez azonban még csak a probléma megol­

dás "mit" része. A "hogyan", tehát a feladatmegoldás

(11)

algoritmusának megadásához is segítséget nyújt a logika eszköztára. A logikai állításokon működő következtetési szabályokat a számitógép számára érthetővé tették, a nyelv interpreterébe vagy fordítójába beépítették. A feladat megoldását áz igy kialakított automatikus kons­

truktiv tételbizonyitási eljárás állitja elő. S mivel az elsőrendű predikátum kalkulushoz van teljes követ­

keztetési szabályrendszer (a PROLOG esetében a lineá­

ris stratégiával ellátott u.n. rezoluciót használják) a tételbizonyitási eljárás matematikai logikai háttere is megalapozott.

A PROLOG elméleti alapjait R. Kowalski, M. Emden és L.

Colmerauer dolgozták ki [21, 22, 5]. Az ötletet először 1974-ben, Marseille-ben implementálták [2], később Edinburgh-ban [45, 46], majd 1975-ben Budapesten, a NIM Ipargazdasági és Üzemszervezési Intézet ICL 19o5/A

tipusu számitógépén is megvalósitották. Azóta újabb és gyorsabb változatok működnek több magyar számitóközpont SIEMENS 7.7.55 ICL System 4-7o, IBM 3o31 és R-2o tipusu gépein [44, 23, 43].

A PROLOG programozási nyelv implementálásával lehetőség nyílt olyan összetett feladatok gyors, számitógépes meg­

oldására, amelyek nagyon nehézkeseknek bizonyultak a hagyományos algoritmikus programozási nyelveken. Ide tartozik az építészeti tervezés modellezésével kapcso­

latos néhány CAD probléma is.

(12)

Az építészeti tervezés modellezése alatt azt a tevé­

kenységet értjük, amellyel formalizáljuk azokat a meggouau lásokat, amelyeket egy tervező mérnök végez, mi k ö z ­

ben egy meghatározott funkciót ellátó épület terét kitöltő egységek méreteit, funkcionális kapcsolatait, közlekedési lehetőségeit, különböző szerkezeti szem­

pontokat kielégítő elrendezési sémáját kialakítja.

Az építészeti tervezés olyan bonyolult, sok komponens­

ből összeálló kreativ szellemi munka, hogy teljes for­

malizálását, illetve automatizálását nem tudjuk, de nem is akarjuk megvalósítani. Célunk lehet azonban számitógépes rendszerek létrehozása, amelyek a tervező mérnök munkáját segitik, hatékonyabbá teszik. Az ilyen számitógéppel segitett tervezés (az angol elnevezésből

"Computer Aided Design" rövidítve: CAD) alapvető prob­

lémája a munkamegosztás az ember és a gép között. A használt számitógép kapacitásától, a meglévő hardware és software eszközök színvonalától függ, hogy mely tervezési szakaszokat biznak a számitógépre és melyek­

hez szükséges a tervező mérnök döntése.

A nemzetközi szakirodalomban publikált építészeti CAD rendszerek közös vonása, hogy a tervezői munka teljes folyamatából kiemelnek egy vagy több szakaszt, s ezek számitógépes automatizálásával foglalkoznak. A számitó­

géppel segitett építészeti CAD rendszerekkel foglalkozó szakirodalom a következő témák szerint csoportosítható:

(13)

1. Automatikus terület felosztási probléma [39, 15, 28];

2. A képi reprezentáció által felvetett önálló grafikai problémák, mint a három-dimenziós testek takartvonalas ábrázolása, perspektivikus ábrázolás kérdései stb.

[27, 37, 34];

3. Mérnöki rajzok, vázlatok számitógépes feldolgozása, digitalizálása [25, 48, 41];

4. Az építészeti tervezés dokumentációjához szükséges műszaki rajzok automatikus elkészítése, és a gazda­

sági számítások elvégzése [16, 24, 4];

5. Az építészeti tervezés általános aspektusainak elem­

zése, a kialakítandó integrált CAD rendszer elvi fel­

építése [1, 12];

6. A matematikai logikán alapuló uj software eszközök,(p l . QLISP, PROLOG) és formális rendszerek (pl. FUZZY hal­

mazok) alkalmazása különböző CAD feladatok megoldásához [13, 26, 43, 29, 3o, 31, 32] .

C.M. Eastman a "The Representation of Design Problems"

[12] c. cikkében az ember-gép kapcsolat két alapvető módszerét különbözteti meg. Az egyik fajta kapcsolat a mérnöki tudást a rajzokon, vázlatokon keresztük kivánja a számitógép számára átadni és érthetővé tenni. Ez ter­

mészetesen sok speciális alakfelismerési problémát vetett fel, amelyek megoldása legalább olyan nehéz, mint a

(14)

természetes nyelvek megértése számitógéppel. A másik irányzat a tervezési információkat a gép által érthető kódokban tárolja, a mérnök számára jól hozzáférhető, könnyen módosítható alakban. Ezt a fajta kapcsolatot könnyebben kivitelezhetőnek, fejleszthetőbbnek tartja, és rámutat a két különböző irányzat kombinálásának elő­

nyeire. A CAD rendszerek fejlődését a magasabbrendu információ és tudásreprezentációtól, és hatékonyabb, speciálisabb probléma-megoldó rendszerektől várja.

Hasonló kívánságokat fejez ki M. Henrion [15], aki az automatikus terület-felosztási programok gyakorlati al­

kalmazásának hiányáról ir, miután elemzi a létező leg- fontosann módszereket. Szerinte a kidolgozott rendszerek nem adekvátak a feladathoz, ezért nem találtak széles­

körű alkalmazásra a tervező mérnökök között. Egy mód­

szertanilag megfelelő rendszernek nemcsak a probléma m e g ­ oldását, hanem a probléma definiálását és a kettő közötti kapcsolatot is tartalmaznia kellene jól érthető formá­

ban. Javasolja a tudásreprezentáció IF< feltétel> THEN

<cselekvés> formáját, melyet 0. Akin is megfelelőnek talál a tervező mérnök gondolkodásmódjához. [1]. Ez utóbbi kívánságot a PROLOG teljes mértékig kielégiti.

Nem véletlen, hogy L.M. Pereira az általa kidolgozott automatikus területfelosztási probléma újszerű, grá­

fokon alapuló elméletének megvalósításához a PROLOG prog­

ramozási nyelvet javasolja [39].

A tételbizonyításon alapuló probléma-megoldás egy érdekes példáját láthatjuk G. Lafue " A Theorem Prover for Recog­

nizing 2-D Representations of 3-D Objects" c. cikkében [25]. Az ORTHO program sokszög lapokkal határolt három

(15)

dimenzós testeket azonosit két dimenziós nézetek alapján.

Az input kétértelműségeit egy tétel-bizonyitó segítsé­

gével szűrik ki a "generáld és ellenőrizd" elv alapján.

A program generálja a test lehetséges nézeteit, majd egy automatikus tételbizonyitó segotségével az inkon­

zisztens nézeteket kizárja.

A fuzzy halmazok egy újszerű CAD alkalmazásával talál­

kozhatunk J.S. Gero és M.Vofneuk "Building Fuzzy CAD Systems" c. cikkében [13]. Az épület tervezéséhez fi­

gyelembe vett követelmény-rendszerbe úgy épitik be a szubjektivitást, hogy a feltételeket fuzzy tulajdon­

ságoknak tekintve súlyozzák. így formalizálják a "pon­

tatlanságot", az egyéni ízlést, s ezzel lehetőséget adnak arra, hogy egy és ugyanazt a CAD rendszert külön­

böző típusú feladatokra a különböző felhasználók más és más szubjektív döntésnek megfelelően használják.

Láthatjuk tehát, hogy a logikai eszközök CAD alkalmazását az összetettebb, magasabb szintű tudásreprezentációt

és probléma-megoldó képességet igénylő feladatok váltot­

ták ki. A PROLOG csak egy eszköz a sok között, bár jelen­

leg a leghasználhatóbbnak tűnik.

Az első CAD PROLOG program Szőts Miklós nevéhez fűződik, aki egyszintes csrnokok méretezését oldotta meg 1975-ben

[43]. Az általa kidolgozott program előregyártott elemek­

ből készülő, egyszintes, daruzatban ipari csarnokot tervez.

(16)

Kiinduló adatként a csarnok geometriai méreteit, és a födémet terhelő egyenletesen megosztó teher inten­

zitását kell megadni. A program megtervezi az alap­

rajzi rasztert (födémpanel kiosztást) , és kiválo­

gatja a geometriai és statikai feltételeknek megfe­

lelő elemeket.

Egy másik érdekes PROLOG alkalmazás Holnapy Dezső munkája, aki a szoliter-alaptervezés egy problé­

máját fogalmazta meg PROLOG programmal.[17]. A fel­

adat: épületpillérek alá megfelelő alaptestek bevá- logatása az eleve adott rendszer-komponens készlet­

ből. Bemenő adatok az erőrendszer és az alapok kö­

zötti távolságok listája; és az erők helyén alkal­

mazandó alaptestek azonosítói képezik a végeredményt.

A jelen dolgozat szerzője által kidolgozott PROLOG alapú építészeti CAD feladatokkal a tanulmány részletesen foglalkozik [29, 3o, 31, 32] . Külön fejezetet szentelünk azoknak az elvi-módszertani

meggondolásoknak, amelyek a CAD programok egyszerű szerkezeti felépítését, könnyű módosíthatóságát cé­

lozzák [18, 19]. A programlistákat, a komplexitás- számitás részletes adatait tartalmazó táblázatokat, a futási eredményeket, és az őket illusztráló ábrá­

kat külön kötetben, a FÜGGELÉK-ben közöljük.

Itt szeretnék köszönetét mondani dr.Ágnes Kaposi-nak, aki a háromhónapos londoni kutatómunkámat lehetővé tett és irányította, s aki nagyban segítségemre volt

(17)

az újszerű komplexitáselmélet kialakításában. Köszö­

nettel tartozom dr. David Warren-nek, aki lehetősé­

get adott arra, hogy az Edinburgh-i Egyetem DEC-10 tipusu számítógépén a programjaimat tesztelhessem, s aki véleményével, tanácsaival segítette munkámat, dr. Dömölki Bálint-nak, aki lehetőséget nyújtott ar­

ra, hogy a Számítástechnikai Koordinációs Intézet számítógépén dolgozhassak. Külön szeretnem megköszön­

ni Köves Péter-nek az IBM 3031-es számitógép PROLOG interpretének installálását, s azt a segítséget, ame­

lyet a kezdeti nehézségek áthidalására nyújtott. Kö­

szönet illeti Rákossy István-t a többszintes lakóépü­

letet tervező programrendszer építészeti koncepciójá­

nak kidolgozásáért. Végül hálával tartozom Szőts Mik­

lósnak, aki a tanulmány anyagához fűzött értékes meg­

jegyzéseivel segítette munkámat.

(18)

2.A LOGIKAI PROGRAMOZÁS ÉS AZ ÉPÍTÉSZETI CAD 2.1. A PROLOG R Ö V I D I S M E R T E T É S E

Egy PROLOG program elsőrendű formulák egy rész­

osztályának, a Horn-klózoknak véges sorozata. A Horn- klóz olyan implikáció, amelynek alakja megfelel az alábbi lehetőségek valamelyikének:

л pedig rendre az implikáció, a logika

"és" jele.

Atomi formula: egy P ( t ^ , . . . , ^ ) alakú formula,

ahol P egy к argumentumu relációjel, és t.-к 0< iá К termek.

í

Term: egy változó, vagy egy f (t^,...tK ) alakú ki­

fejezés, ahol f egy к argumentumu függvényjel és t^-k Oá iá К termek. А О argumentumu függ­

vényjel konstans.

A relációjelek, függvényjelek, és változójelek halmazai páronként diszjunktak.

A változókat minden klózban univerzálisan lekötöttnek tételezzük fel, a függvény és relációjelek, valamint

atomi formulák,

(19)

az Л, jelek jelentése a szokásos.Egy PROLOG prog­

rammal valamilyen vizsgálandó univerzum leirását ad­

hatjuk meg, majd a leirt világra vonatkozóan kérdé­

seket tehetünk gél, illetve megoldandó célokat tűzhe­

tünk ki. A kérdések megválaszolása illetve a célok megoldása jelenti a PROLOG program futását.

Az 1. és 2. tipusu klózokkal Írhatjuk le a feladat világát, melyeket rendre reduktoroknak illetve tény­

állításoknak hívunk. A célok megadására a 3. tipusu klózokat használhatjuk, melyeket célállitásoknak ne­

vezünk. A PROLOG interpretere tekinthető SL rezolu- ción alapuló automatikus tételbizonyitónak. M ű k ö ­ désének pontos ismertetését mellőzzük, részletes leírása megtalálható [44]- b e n .Kiemeljük azonban

két fontos tulajdonságát, a mintaillesztést (pattern matching) és a visszlépést (backtracking). A minta- illesztés lehetővé teszi, hogy a feladatot először általános problémamegoldási sémákban fogalmazzuk meg, amelyek csak a program futása során fognak konkrét adatokkal aktivizálódni. A visszalépés pedig arra ad lehetőséget, hogy ha nem a megfelelő sémát aktivi­

záltuk, sorra vegyük a még lehetséges sémákat, amig meg nem oldjuk a feladatunkat, vagy amig kiderül, hogy

a program által definiált univerzumban a feladatunkat nem tudjuk megoldani.

A program futása úgy kezdődik, hogy a feladat m e g ­ fogalmazására szolgáló célállitás első atomjához az

(20)

interpreter keres egy olyan reduktort , vagy tényállí­

tást, amellyel az mintaillesztéssel egyesíthető. A mintaillesztés egy célállitás - a jelenlegi szin­

taktikus konvencióknak megfelelő elnevezéssel - egy negativ atomja és egy reduktor "feje"( a impli­

káció konklúziója) vagy egy tényállítás, mindkét

esetben pozitiv atomja közötti illeszthetőséget ellen­

őrzi, és ha lehetséges, a két kióz egyesítését végre­

hajtja. Egy negativ és egy pozitiv atom illeszthető, ha

- relációjelük azonos, tehát argumentumaik száma is megegyezik;

- az egymásnak megfelelő argumentum párok rendre megfelelnek az alábbi három eset egyikének;

1. mindkét argumentum változó;

2. az egyik argumentum változó, a másik összetett term (azaz konstans, vagy függvények, változók és konstansokból generált kifejezés)

3. mindkét argumentum összette term, és illeszthe tők.

A hagyományos programozási nyelveknél megszokott "érték adás" művelete itt mintaillesztéssel történik, ha a fent emlitett 2. esetben az egyesítés után a változó értéke az összetett term lesz. Vegyük észre, hogy tel­

jesen mindegy, hogy a negativ, vagy a pozitiv atom tartalmazza-e az összetett termet, az illesztéssel az értékadás mindkét irányban megtörténhet.

(21)

Egy célállitás és egy reduktor egyesítése úgy történik, hogy a reduktor negativ atomjai átveszik azokat az

uj értékeket, amelyeket a mintaillesztés során az argumentumok kaptak,( ha szerepeltek a negativ atomok­

ban olyan v á l t o z ó k , amelyek a pozitiv atomban is szerepel t e k ). A továbbiakban ezek a negativ atomok önálló cél- állitásokká válnak, és újabb mintaillesztési eljárások­

kal kielégithetôek. A feladat megoldása akkor fejező­

dik be, ha az összes eleve kitűzött és generálódott célállitás a mintaillesztéssel kielégítést n y e r t . ( a tételt sikerült bebizonyítani). A program futásának másik megállási módja az, hogy a mintaillesztés siker­

telensége miatt a feladatot - az adott feltételek mellett nem lehet megoldani( a tételt nem tudjuk bizonyítani).

Mivel az elősrendu logika nem eldönthető, nem tudjuk biztosítani, hogy a bizonyítási eljárás minden esetben végetérjen. Viszont a teljesség miatt igaz tétel esetén az eljárás sikeresen befejeződik.

2.2. A P R O L O G S A J Á T O S S Á G A I N A K F E L H A S Z N Á L Á S A A Z É P Í T É ­ SZETI T E R V E Z É S M O D E L L E Z É S É B E N

Az építészeti tervezés nem determisztikus folyamat, a kivánt feltételek nem határozzák meg magát az épületet.

Az építészeti tervezésre a próbálkozások, variánsok előállítása a jellemző. A különböző változatok kiértéke­

lése és a végső döntés újabb - esetleg szubjektív -

követelmények figyelembevételével történik. Egy automati­

kus rendszer, amely a fenti folyamatot kívánja modellál­

ni csak úgy működhet, hogy bizonyos alapvető szabályok

(22)
(23)

szeti CAD problémák, amelyek elvileg számitógépre ori­

entáltak (pl. lakásalaprajz variációk előállítása) na­

gyon nehezen programozhatónak bizonyultak a hagyományos eszközökkel. A PROLOG nyelv használata lehetővé tette, hogy bővüljön azoknak a feladatoknak a köre, amelyeket a számítógépre lehet b i z n i , s ezáltal az ember és a gép közötti munkamegosztás a magasabb fokú automatizálás irányába tolódjon el.

Ebben a fezetben egy konkrét CAD program bemutatásán keresztül sorba vesszük és elemezzük azokat a PROLOG- ban rejlő új lehetőségeket, módszereket, programozás - technikai megoldásokat, amelyek megkönnyítették, vagy lehetővé tették, eddig nem formalizált tervezési fo­

lyamatok számitógépes automatizációját.

2.2.1. Paneles lakásalaprajz variációkat tervező program

A programrendszer adatbázisa, panelek, cellák

A program célja, hogy a budapesti házgyárak által gyár­

tott panelekből adott méretű, szobaszámú és félszobaszámú lakások alaprajzi variánsait előállítsa. Jelen program a 2.sz. Házgyár paneléinek méreteivel működik, de az el­

járás más házgyárak paneléire is alkalmazható, amennyi­

ben az adatbázisban rögzített panelelemek méreteit meg­

változtatjuk.

Mivel a lakás összes helyiségének sarokpontjai derék­

szögű négyszöghálóra, un. modulhálóra illeszkednek, a programban a méreteket nem méterben, hanem modulban adjuk meg. A modul a teherhordó szerkezetek méreteinek

(24)

legnagyobb közös osztója. Ebben a rendszerben 1 modul = o,3 m.

A házgyár által gyártott födémelemek szériája adott (n db különböző méretű téglalap). A szükséges számú és méretű téglalapok egymás mellé illesztéséből adódó sikidom-változatokat nevezhetjük alaprajzi konturvari- ánsoknak.

A program 3 födémpanellal dolgozik:

F l - 2 , 7 m x 4 , 2 m F 2 - 2 , 7 m x 5 , 4 m F 3 - 2 , 7 m x 2 , 7 m

A födémpanelok határozzák meg a teherhordó egységek (cellák) méreteit. A program adatbázisába a cellákat vettük be. 4 teherhordó cella adott a következő for­

mában :

CELLA (NAGY, 14, 18, 252 ) . CELLA (KIS, 9, 18, 162) . CELLA (FELNAGY, 9, 14, 126) . CELLA (FELKIS, 9, 9, 81) .

A zárójel utáni első paraméter a cella azonosítója, a második szélessége, a harmadik a hossza, a negyedik a területe modulban.

A NAGY cella a nappali szoba, a KIS cella egy kisebb méretű, pl. gyermek- vagy hálószoba, a FELNAGY és FELKIS cellák félszobák kialakítására alkalmasak. Egy NAGY cellából alakítható ki válaszfalak és a vizesblokk beállításával az un. OSZTOTT cella, amely a lakás összes egyéb helyiségét - az előszobát, konyhát, fürdőszobát, WC-t, gardrob-folyosót - tartalmazza.

(25)

A különböző OSZTOTT cellatipusok szintén a program adatbázisához tartoznak. Programrendszerünk kétféle OSZTOTT cellát kezel: egy étkezőkonyhás és egy

konyha-étkezőfülkés változatot. A konyha mindkét

esetben ablakos, tehát belső szellőztetésu konyhát nem engedünk meg. Az étkezőfülkés megoldás helykihaszná­

lás szempontjából előnyösebb, ezért ahol lehet, ennek a változatnak van prioritása. A program adatbázisában egy OSZTOTT cellát, pl. a következő módon lehet repre­

zentálni :

OSZTCEL (ETKFULKES, ABLAK, 13,NYÍLT, 8, 14).

A 6 argumentum értelme rendre a következő:

1 - A konyha típusa.

2,3,4,5 - Az északi, keleti, déli és nyugati fal jellemzése.

A példában a konkrét paraméterek jelen­

tése a következő:

ABLAK: északon van a konyhaablak.

13: keleten 13 modulnyi zárt falrész van, a konyha és a vizesblokk keleti fala.

A többi lehet zárt és nyílt, azaz ajtóval ellátott falrész.

NYÍLT: A déli fal nyílt, lehet rajta ajtó 8: A nyugati falon 8 modulnyi falrész van a konyha nyugati fala.

6 - Az OSZTOTT cella szélessége a példánkban 14 modul.

A rendszer adatbázisában 5 különböző OSZTOTT cellavari­

áns szerepel, ugyanis kétféle konyhatípus van, de az

(26)

ablak elhelyezésének változtatása és az OSZTOTT cella 90°-os elforgatása újabb variánsokat eredményez.

(1.á b r a ).

F Ü R D Ő

_ i

W C

1. ábra

A program a lakásalaprajz-konturnak megfelelő OSZTOTT cellát úgy tervezi meg, hogy az adatbázisban rögzitett OSZTOTT cellák szimmetriaváltozataiból kiválasztja

(27)

azokat, amelyek a következő feltételerendszernek megfelelnek :

1. A konyha ablakos legyen.

2. Legalább 2 szoba külön bejáratú legyen (azaz az előszobából vagy a folyosóról nyíljon).

3. Biztosítva legyen a lakásba való bejárási lehető­

ség.

A feladat megadása

A feladatot a következő formában jelöljük ki:

- LAKÁS (73,2,1) - FAIL.

Ez azt jelenti, hogy szeretnénk megtervezni egy maximum 73 m -es, 2 szobás + 1 félszobás házgyári 2

lakás összes lehetséges változatát. Ha csak egy változatra vagyunk kiváncsiak, azaz azt szeretnénk eldönteni, hogy lehet-e ilyen lakást tervezni, a - FAIL beépített predikátum alhagyható.

A szoba- és félszobaszám összege legfeljebb 5 lehet.

A programrendszer részei

Jelenleg a rendszer 2 szegmensből áll: az előkészítő programból és a főszegmensből.

Az előkszitő program

A program inputja a tervezendő lakás maximális alapte-

2 _

rülete m -ben, valamint a szobák es félszobák szama.

Az output:

(28)

a) A program által tervezett lakás alapterülete

m -ben (ez nem nagyobb az inputként megadott alap­2 területnél ) .

b) A lakáshoz tartozó födémszükséglet, azaz hogy a különböző födémpanelokból külön-külön mennyire van szükség.

c) Egy cellalista vagy cellalista-sorozat. A cella­

lista elemei az adatbázisban rögzitett teherhordó cellák azonosítói. Egy ilyen a tervezendő lakás­

hoz szükséges cellákat tartalmazza. Például:

NAGY, KIS, F E L N A G Y .N I L .

A program egy feladatra több lehetséges változatot készit el. Futása után a tervezőmérnöknek kell eldön­

tenie, hogy melyik változat a számára legmegfelelőbb.

A kiválasztott változat valamelyik cellalistája fog input adatként szolgálni a következő program, a fő­

szegmens működéséhez.

A főszegmens

Inputja a cellalista.

Outputj a :

a) A teherhordó cellák geometriai elhelyezkedését m e g ­ adó sarokpontok koordinátái modulban. Például:

NAGY 0; O. 0; 14. 0; 18. 18; 14.

b) A cellákhoz tartozó szobák ablakainak tájolása c) Az egyéb helyiségeket tartalmazó OSZTOTT cella

falainak koordinátái d) A konyha típusa

e) A konyhaablak tájolása

(29)

A В C

D E F

2. ábra

3. ábra

f) A konyha sarokpontjainak koordinátái g) A vizesblokk sarokpontjainak koordinátái h) A bejárati ajtó helye

i) A külön bejáratú szobák száma.

A föszegmens futása után megrajzolható a program által elkészített alaprajz. Ha rajzoló periféria is rendelke­

zésünkre állna, közvetlenül rajzos output készülne.

(5, 6. ábra).

(30)

A fôszegmens - funkcióját tekintve - 3 lényeges részre tagolódik:

1. A teherhordó cellák geometriai egymás mellé illesztése, az OSZTOTT cella kijelölése, az ablakok helyének rögzítése.

2. Az OSZTOTT cella és a szobák falainak metszete, az un. KÖZÖS LISTA előállítása, amely az átjárásai és bejárási lehetőségek megadásához szükséges.

3. Az OSZTOTT cella felosztása konyhára, vizesblokk­

ra, előszobára, gardrobe-folyosóra.

A különböző cellák (vagy téglalapok) egymáshoz illesz­

tése alkotja a tervezési feladat gerincét. Ezért ezt a részt szeretnénk részletesebben kifejteni. Egy cella alaphelyzetének az adatbázisban rögzített helyzetét nevezzük. Emellett felhasználjuk a 9o°-kal elforga­

tott helyzetet is. Egy lakás maximum 6 teherhordó cella összekapcsolásából állhat, a 2 ábrán bemutatott elren­

dezésben .

A cellák összekapcsolására 3 illesztési szabályt vezet­

tünk be (3. ábra) :

a) Két azonos szélességű cella kerülhet egymás alá, mégpedig úgy, hogy az 1. cella bal alsó sarka

illeszkedjék a 2. bal felső sarkához.

b) Két bármilyen méretű cella összekapcsolható úgy, hogy az 1. cella jobb felső sarka illeszkedjék a 2. bal felső sarkához, és a 2. alaphelyzetben van.

c) Két alaphelyzetben levő cella illeszkedhet úgy, hogy a 2. cella bal felső sarka 1,2 m-rel( azaz 4 modullal) lejjebbb van, mint az 1. jobb felső sarka.

(31)

4. ábra

Ha nincs külön letiltva, az elemeket alaphelyzetben és 9o°-kal elforgatva is illeszthetjük egymáshoz.

Az illesztés a következő algoritmus szerint megy végbe. A CELLALISTA első elemét kijelöljük kezdő­

cellának. Ekkor a cellához két irányban: jobbra vagy alá lehet másik cellát kapcsolni. A jobbra kapcso­

lás a c) vagy b) illesztési móddal, az alákapcsolás az a) illesztési móddal történhet. Ha a 2. elemet már összekapcsoltuk az 1-vel, akkor a 3. elemet kap­

csolhatjuk az 1. vagy 2. elemhez a 3. illesztési mód valamelyikével, és igy tovább( lásd a 4. ábrát).

Az algoritmusból látható, hogy a CELLALISTA sorrendje befolyásolja a kialakuló sikidom formáját, De mivel a kötött sorrenddel is már elég nagy a variánsok száma

(a feladattól függően kb. 2o-5o db), ezért úgy

döntöttünk, hogy a főszegmensen belül nem változtatunk a CELLALISTA sorrendjén, ellenben az előkészítő szeg­

mensben előállítjuk a CELLALISTA összes egymástól különböző perrautánsát. így a főszegmens többszöri futtatásával megkaphatjuk az összes lehetséges válto­

zatot .

(32)

5. ábra. A főszegmens outputja

(33)

6. ábra

Lakásváltozatok

(34)

2.2.2. Programozási elvek, megoldások, fogások 1. A feladat felbontása

Egy eléggé komplex tervezési feladatot ritkán lehet egyetlen programmal megoldani, azaz teljesen automa­

tizálni. Meg kell keresni azokat a pontokat, ahol emberi beavatkozás, döntés szükséges, és a feladatot ilyen módon kell szegmentálni. Az előző fejezetben említett feladat esetén két programra bomlott a rendszer, az előkészítő és a fő programra. Erre azért volt szükség, hogy elkerüljük a "kombinato­

rikai robbanást". Célunk a feladat világába lévő összes lehetséges megoldás (alaprajzi variáns) előállítása.

Ha a feladatot egy programon belül akarnánk megoldani, a megoldások száma sokszorosa lenne a reálisan értékel­

hető nagyságrendeknek, ráadásul sok azonos, fölösle­

ges változat születne. Ezért egy ponton leszukiettük a döntési fát, kiválasztva egyetlen cellalista válto­

zatot a következő program számára input adatként.

2. A feladat megadása

A feladatot kijelölő célállitás formája tükrözi a feladat tipusát. A

- LAKÁS (7o, 2, 1 ) .

célállitással azt a feladatot adjuk a programrendszer, nek, hogy tervezzen egy maximum 7o m -es, 2 szobás 2

1 félszobás lakást, avagy ellenőrizze, hogy egyáltalán kielégithető-e ez a kivánság. A

(35)

- LAKÁS (7 o , 2, 1) - FAIL.

célállitással a megoldás összes lehetséges változatát kívánjuk megkapni. Ez a trükk a PROLOG-nak azt a

tulajdonságát használja ki, hogy az interpreter a visszalépés segítségével "próbálkozni" tud. Az inter­

preter a program futása során a leírt szabályok segít­

ségével döntési fát épit fel. Amikor a program először végigfut, azaz a döntési pontok sorozatán keresztül­

haladva elér a fa leveléig, előáll egy lakásalaprajz variáns. A program le is állna, ha a feladat megadása­

kor nem szereplne a - FAIL predikátum, amely sohasem sikerül (azonosan hamis ) . A -FAIL predikátumot a következtetési mechanizmus úgy értelmezi, hogy zsák­

utcába jutott, vissza kell lépnie, és meg kell próbál- /

nia egy másik változatot. így előállítja a következő alaprajzot, majd a FAIL-lel találkozva ismét vissza­

lép stb. így a program bejárja az egész döntési fát, és minden lehetséges változatot előállit.

A előző fejezetben ismertetett feladatban ugyan nem használtuk ki, de másutt jól hasznosítható a PROLOG azon tulajdonsága, hogy egy reláció argumentumai input és out­

put funkciót is betölthetnek, és igy egy azon reláció különböző feladatok megfogalmazására lehet alkalmas.

Tekintsünk pl. egy olyan programot, amely egy kórház épületcsoportjában lévő helységek funkcióit irja le.

Legyen a célállitásunk

- BENNEVAN (FŐÉPÜLET, IGAZGATÓSÁG).

(36)

Ez azt a kérdést fogalmazza meg, hogy vajon igaz-e, hogy az igazgatóság a főépületben van. A

- BENNEVAN (*X, IGAZGATÓSÁG) -OUTPUT (* X ).

azt kérdezi, hogy melyik épületben van az igazgatóság.

(a * -al kezdődő szimbólumok változókat jelölnek). A - BENNEVAN (P A V I L O N l ,* Y ). - OUTPUT (* Y ).

azt kérdezi, hogy milyen helység van az 1. Pavilonban. A - BENNEVAN ( P A V I L O N l , *Y ) - OUTPUT (*Y‘) - FAIL, célállitással az 1. Pavilon összes helységét megkap­

hatjuk . Mig a

- BENNEVAN (*X, *Y ) .

célállitással azt tudhatjuk meg, hogy van-e egyáltalán olyan helységünk, amely az adatok között felsorolt épületek egyikében van.

3. Struktúrák reprezentációja

Épitészeti tervezési feladatok modellezése során szük­

ség van olyan program-beli struktúrákra, amelyek több épitészeti egység (pl. szobák) kapcsolódási lehető­

ségeit irja le. A struktúrák PROLOG programbeli egy­

fajta lehetséges reprezentációi olyan "termek" azon lo­

gikai kifejezések, ahol a függvényjelek az operátorok.

Bonyolult struktúrákat több operátor alkalmazásával épitünk fel, amelyek zárójelezési szabályait a priori­

tási szám megadásával lehet definiálni.

Tekintsük a lakások általános sémáját megadó szerkezetet

(37)

A В C

D E F

А. В. С ! D. Е. F

6. ábra

A fenti struktúrában két operátort, a "!" és a

operátorokat használjuk. Kötési prioritásukat az ope­

rátor deklarációban definiáljuk:

+ OPERATOR ( !, RL, 4) . + OPERATOR (., R L , 5).

ahol a RL azt jelenti, hogy a zárójelezés "right to left", jobbról-balra történik, lásd A . ( B . ( C. NIL))), és a

magasabb prioritású (5) operator köt erősebben, mint a "!" operátor (4). Tehát az A.B.C! D.E.F össze­

tett struktúrában a "!" a "fenti" és "lenti" cellákat választja el, amelyek maguk is listák. A "fent" és "lent"

csak a struktúrában elfoglalt helyre és nem a lakás

vertikális szerkezetére utal. Mind a hat teherhordó cella egy szinten helyezkedik el.

Nézzühk egy példát a fenti struktúra program-beli alkal­

mazására. Definiáljuk az ALATTA relációt, amely a fenti struktúra két egymás "alatti" elemét definiáija( pl: В és E ) :

(38)

+ALATTA (*X. *L1 ! *Y. * L 2 , *X, *Y ) . +ALATTA (*Z. *L1 ! *W. *L2, *X, *Y ) !

-ALATTA (*L1 ! *L2, *X, * Y ).

Az ALATTA reláció három argumentumából az első a lakás struktúráját, a második egy "fenti" cellát, a harmadik az "alatta" lévő cellát reprezentálja.

A két kióz értelme a következő:

1. *X cella alatt *Y cella van, ha a ! operátorral elválasztott listákból (*X. *L1 és *Y. * L 2 ) rendre ők az első elemek.

2. *X cella alatt *Y cella van, ha ugyan a *Z. *L1 és a *W. *L2 listákban nem ők az első elemek, de az első elemeket leválasztva az *L1 és *L2 maradék listákban *X alatt *Y van.

A megfogalmazásból látható, hogy az ALATTA relációt rekurzívan definiáltuk. Három elemű listák esetén ez a definíció fölöslegesen általánosnak tűnhet, de fel­

téve, hogy az alapvető szerkezeteket esetleg bővít­

hetjük, ez a tömör és általános megfogalmazás a vál­

toztatás után is érvényes maradna.

4. Elforgatás, szimmetriái viszonyok

Az építészeti tervezés modellezésében alapvető fontos­

ságú a különböző síkidomok (többnyire téglalapok) geo-

(39)

metriai transzformációknak ábrázolása. Ez a feladat PROLOG-ban igen frappánsan megoldható a megfelelő relációk argumentumaival való manipulálással. Né­

hány példa:

4.1. Az adatbázisban szereplő "teherhordó cellák", téglalapok egy rögzített geometriai elrende­

zést tükröznek: a

+CELLA (NAGY, 14, 18, 252).

tényállás azt jelenti, hogy a NAGY azonosí­

tóval ellátott teherhordó cella "széle" 14 modul, "hossza" 18 modul, területe 252 modul.

NAGY 18

■V

7. ábra

Ezt a téglalapot a tervezés során az adatbázisban rögzített helyzetében és 9o°-al elforgatva is sze­

retnénk használni. Ezt a szabályt a követekező 2 kióz segítségével tudjuk megfogalmazni:

+CELLA1 ( »AZONOSI T O , »SZELE, »HOSSZA, »TERÜLETE) -CELLA (»AZONOSITO, »SZELE, »HOSSZA, »TERÜLET®) +CELLA1 ( »AZONOSITO, »SZELE, »HOSSZA, »TERÜLETE)

-CELLA (»AZONOSITO, »HOSSZA, »SZELE, »TERÜLETE)

NAGY H0SSZA=18

.i —

NAGY HOSS ZA=14

SZELE=14

- - - +

8. ábra

I S ZELE=18

I

(40)

4.2. Ha a programban tögzitett téglalap egyik ol­

dalát ÉSZAK-i-nak definiáljuk, a többi irányt a szokásos módon jelölhetjük ki. így beszélhe­

tünk északra, vagy délre nyiló ablakokról, a lakás bejáratának irányáról.

ÉSZAK NYUGAT

DÉL

KELET

9. ábra

Defináljuk az egymással szemben lévő irányokat, és azokat az iránypárokat, amelyek egy szoba sarkaiban futnak össze.

+IRANY (ÉSZAK).

+IRANY (KELET).

+IRÁNY (DEL).

+IRÁNY (NYUGAT).

+SZEMBEN (ÉSZAK, DEL).

+SZEMBEN (KELET, NYUGAT).

+SZEMBEN ( *X, *Y) -SZEMBEN (*Y, *X).

+SAROK (*X, *Y)

- N O T ( SZEMBEN (*X, *Y)).

Látható, hogy a SZEMBEN reláció szimmetrikus vol­

tát külön definiáltuk. A "NOT" beépített eljárás jelentése a következő: a NOT (R (t^,...,t ))

(41)

eljárás akkor sikerül, ha R(t^,...,tn ) eljárás nem sikerül, és forditva, ha a R ) eljárás sikerül, a NOT R t )) nem sikerül.

4.3. Ha a téglalap sarokpontjait egy koordináta-

rendszerben elhelyezett koordináta értékpárokkal adjuk meg, akkor a transzformációkat a következő­

képpen definiálhatjuk. Tekintsünk egy Q téglalapot

; F Q4 Q3

Q

A ; В C;D Ql Q2

l o . ábra

A +TEGLA (A ; B , C;D, E ; F , G;H ).

tényállás négy paramétere rendre a négy sarokpont koordináta párja. Az abszcissza és ordináta érté­

kek a operátorral vannak elválasztva.

A sarokpontokból listát is készíthetünk; s igy egy téglalap helyzetét ez a lista pontosan definiálja:

Ql. Q2. Q3. Q4. NIL

Nézzük meg, hogy hogyan kapjuk meg egy Q téglalap Q1-Q2 egyenesre vonatkozó R tükörképét:

(42)

A4 ;B4=Q4

Ql

X4;Y4=R4

Q3=A3;B3

Q

R

Q2

R3=X3;Y3 11.ábra

+TUKR0Z ( *Ql. *Q2. *Q3. *Q4. NIL, *R4.*R3.*Q2. *Q1.NIL ) - T Á VOLSÁG( Q1,*Q4,*T)

-TŰK (*03,*T,*R3) -TŰK (*Q4 , *T', *R4 ) . +TAV0LSAG (*XI;*Y1, *X4 ;*

-MINUS (*Y4, *Y 1 ,*T).

+TUK (*A;*B, * T , *A; *Y ) -TIMES (*T, 2, *Z) -MINUS (*B, * Z , *Y) .

Bármely egyéb transzformációt a fent definiált struktúrák segítségével hasonló módon kaphatunk m e g .

5. Adatbázis - kezelő eljárások használata

A legtöbb PROLOG interpreter változat rendelkezik olyan beépitett eljárásokkal, amelyek módosítják az adatbázist, illetve magát a programot, hiszen PROLOG program esetén

(43)

az adat és a program egységes szerkezetűi mindkettő Horn-klózokkal reprezentált). Ilyen eljárás az

ADDCLAUSE, amelynek hatására uj klózzal bővül a program, a DELCLAUSE, amely kitöröl egy klózt, és a SUPCLAUSE, amely időlegesen kitöröl egy klózt, de visszalépés esetén a kióz újra érvényes lesz.

Az ADDCLAUSE jól használható arra a célra, hogy a

futás egy részeredményét ne egy uj argumentumban, hanem egy újonnan felvett klózban tároljuk. Nézzünk egy

példát az ADDCLAUSE használatára:

A paneles lakásalaprajz tervező program előkészítő al- programjának outputja a teherhordó cellák azonosítóiból álló cellalista. Ez a lista fog input adataként szol­

gálni a következő programhoz. De mivel a cellalista ele­

meinek sorrendje befolyásolja a lehetséges alaprajzi variánsokat, az összes lehetséges megoldást csak úgy kaphatjuk meg, ha generáljuk a cellalista összes permu­

tációját. Ezt a funkciót a PERM nevű eljárás végzi, amelynek két argumentuma van. Az első a permutálandó lista, a második az elsőnek egy permutációja:

- PERM (*CELl, *C E L 2 ).

A PERM eljárás pontos definícióját és magyarázatát később közöljük, most rátérünk arra, hogy hol és miért használtunk az ADDCLAUSE adatbázis kezelő eljárást. A cellalista elemei között több azonos is lehet, s igy a PERM eljárás sok felesleges, egymástól nem különböző permutációt generálhat. Számunkra azonban csak a külön-

(44)

böző permutációk érdekesek. A RÉSZ nevű eljárás segít­

ségével generáljuk a *CEL1 lista egy permutációját, ellenőrizzük, hogy az uj permutáció azonos-e valamelyik régebben generálttal, és csak akkor nyomtatjuk ki, ha különböző.

+RESZ (*CEL1, *CEL2)

-ADDCLAUSE (+ (CLAUSE (*CEL1)). NIL) -OUTSPACES (13) - OUTPUT (* C E L 1 ) -PERM (*CEL1, *CEL2 )

-KULONBOZ (*CEL2).

+KULONBOZ (* C E L 2 )

-CLAUSE (*CEL2) -/.

+KULONBOZ (*CEL2)

-ADDCLAUSE (+ (CLAUSE (*CEL2)). NIL)

-NEWLINE -OUTSPACES (13) - OUTPUT (* C E L 2 ).

A RÉSZ eljárás a következőképpen működik:

ADDCLAUSE segítségével felveszünk a programba egy uj klózt, amelynek neve CLAUSE, és egyetlen argumentuma van, a *CELl-ben lévő permutálandó lista. Ezt a listát az OUTSPACES és OUTPUT beépített eljárások segítségével ki is nyomtatjuk. Majd meghívunk a PERM eljárást, amely a

*CELl lista egy CEL2 permutációját fogja generálni.

A következő KULONBOZ eljárásnak két esete van. Az első, hogy az újonnan generált permutáció megegyezik egy elő­

ző, az adatbázisban a CLAUSE nevű klózokban tárolt lis­

ták egyikével. Ekkor a -CLAUSE (*CEL2) célállitás illeszkedik valamilyen +CLAUSE(*X). alakú klózhoz, és

(45)

a KULONBOZ első változata sikerül. Ebben az esetben nem nyomtatjuk ki a listát, hiszen ez ismétlés volna.

A másik esetre akkor kerül sor, ha az első nem teljesül Ekkor az újonnan generált permutáció eltér az összes előzőtől, ezért felvesszük ADDCLAUSE segítségével egy uj +CLAUSE(* C E L 2 ). alakú tényállításba, és ki is nyom tatjuk. Mivel az egész program -LAKAS (7o, 1, 2) -FAIL, célállitásokkal van meghiva, azaz az összes lehetsé­

ges megoldást keressük, ezért a visszalépések követ­

keztében a PERM eljárás az összes lehetséges permutá­

ciót generálni fogja, de kinyomtatni csak az egymástól különbözőket fogjuk (1 2. ábra).

(46)
(47)

Egy lista összes lehetséges permutációinak generálása olyan általános feladat, amely más programban is használható, s amelynek rekurziv definíciója PROLOG- ban igen tömör és szemléletes:

+PERM (NIL, NIL).

+PERM(*A, *E. *Y) -ELEME (*A,*E)

-KIHAGY( * A , * E , *B) -PERM (*B, *Y).

+ELEME ( NIL, NIL).

+ELEME ( *X. * L , *X).

+ELEME ( *X. *L, * Y ) -ELEME (*L, * Y ).

+KIHAGY (*X. *L, *X, * L ).

+KIHAGY (* Y . * L , *X, *Y . *L1) -KIHAGY (* L , *X, * L 1 ).

A fenti programrészletet a következő módon értelmez­

hetjük:

PERM:

Az üres lista (NIL) permutációja az üres lista.

Egy * A lista permitációja egy olan *E. *Y lista lesz, ahol

- *E a lista első eleme és *Y a maradék lista;

- *E az *A lista egy eleme;

- az *A listából az *E elemét kihagyva *B listát kapunk;

- *B lista egy permutációja *Y lista.

(48)

ELEME :

Az üres lista eleme az üres lista.

Egy *X.*L alakú lista eleme az *X. ( az első e l e m e )- Egy *X.*L alakú lista eleme az * Y , ha eleme az *L maradéklistának.

KIHAGY :

Egy *X.*L alakú listából ha kihagyjuk az *X elemét, akkor *L listát kapunk.

Egy * Y . *L alakú listából ha kihagyjuk az *X elemét egy * Y . *L1 alakú listát kapunk, mégpedig úgy, hogy az *L listából kihagyva az *X elemet *L1 listát ka­

punk.

6 о Hierarchikus, strukturált programozás

A PROLOG nyelv felépítéséből adódik, hogy szinte csak strukturált programokat Írhatunk, és a programszerve­

zés hierarchikus. PROLOG-ban ugyanis úgy kell progra­

mozni, hogy a feladatot részfeladatokra bontjuk reduk- torok segítségével, majd ezeket tovább bontjuk stb.

A részfeladatokra bontás egészen addig történik, amíg a részfeladatok olyan egyszerűnek nem lesznek, hogy megoldhatók tényállásokkal, vagy az interpreterbe beépí­

tett eljárásokkal. Nagyon megkönnyíti a programozási technikát, hogy bizonyos részfeladatok a program egé­

szétől függetlenül megfogalmazhatók.

7. Prioritás

A PROLOG következtetési mechanizmusának egyik alap­

vető tulajdonsága, hogy ha egy szabályból több változat

(49)

van, akkor mindig a lehetséges elsőt választja.

Ezáltal lehetőséget ad bizonyos prioritások érvénye­

sítésére. A prioritásokon egyszerű sorrendcserével lehet változtatni. így amikor a program előállítja az összes alaprajzi variánst, először a számunkra ked­

vezőbb, később a kevésbé kedvező, de lehetséges vál­

tozatokat állitja elő.

8. Módosithatóság

A PROLOG nyelven irt programot rendkívül egyszerű mó­

dosítani. Egy PROLOG program Horn-klózok listája, ahol a kiózok ponttal vannak elválasztva. Ha valamely szabály­

ból több változatot akarunk készíteni, egyszerűen felso­

roljuk a szabályokat egymás után. Ha bőviteni akarjuk e szabályok körét, akkor anélkül, hogy a már megirt uta­

sításokon bármit is változtatnánk, a meglévő szabályok mögé beirjuk az uj szabályokat. Éppen ilyen egyszerű

bizonyos szabályok elhagyása, Ennek igen nagy a jelentő­

sége, hiszen például kellően nagy feladat esetén a va­

riációk száma olyan naggyá válhat, hogy bizonyos megszo­

rítások, és letiltások nélkül a program nem lenne gaz­

daságos .

(50)

3. LOGIKAI ALAPÚ PROGRAMOK KOMPLEXITÁSA 3.1. A K O M P L E X I T Á S SZÁMÍTÁS C É L J A

Jelenleg több időt és energiát igényel a meglévő software eszközök karbantartása illetve módosítása, mint az új programok fejlesztése. Több tudományos központban megindult a kutatás olyan, számmal m é r ­ hető mértékek definiálására, amelyek valamilyen módon a programok egyszerűségét, érthetőségét

és főleg megbízható módosíthatóságát mérnék. Ilyen mértékek birtokában objetiv módon lehetne értékel­

hetni a különböző programvariánasokat, és a változó szempontoknak megfelelően optimális mutatókat le­

hetne javasolni.

Bill Curtis és társai cikkükben

Í6l

a programok két­

fajta komplexitását különböztetik meg:

- számítási (computational) és - pszichológiai komplexitást.

A számítási komplexitás a feladat megoldásának ki­

számításával kapcsolatos kvantitatív aspektusokat veszi figyelembe, mint például a megoldó algoritmusok gyorsasága, vagy a lehetséges programágak száma.

A pszichológiai komplexitás a software eszközök azon tulajdonságaira utal, amelyek a program érthetőségét, egyszerű és gyors módosíthatóságát befolyásolják.

(51)

Az utóbbi években kifejlesztett komplexitáselméle­

tek közül jelentősnek mondható M.H. Halstead

munkássága [14]. Halstead a programok generálására fordított munka nagyságát négy egyszerű paraméter­

ből vezeti le:

n - a programban előforduló különböző operátorok száma;

n2 - a programban előforduló különböző operandusok száma;

N^ - az összes operátor teljes előfordulásainak összege;

N2 - az összes operandus teljes előfordulásainak összege,

ahol operátor minden alapszó (pl. GOTO, IF THEN ELSE, BEGIN...END, stb) , cimke, zárójelek, mate­

matikai műveleti jelek (pl. +, -, *, :), értékadás jele, az utasításokat elválasztó jel (pl. ;),

és egyéb az előzőektől szintaktikusán megkülönböz­

tethető jelek;

operandus minden változó és konstans.

A program hossza N=N1+N2;

A program szótárának nagysága п = п^ + П2'"

A program"köbtartalma" (volume) V= N log2^;

A program minimális vagy potenciális köbtartalma

* , * V =n l°9 2n

(52)

ahol V a program olyan változatának köbtartal­

ma, amelyben az operátorok és az operandusok nem ismétlődnek, tehát

N 1 - nl '

it *_ * N 2 n2

A program szintje L = V ; 2n.

L ~

V N 2

A programozási munka mértéke T2 E = V _

L V*

és n*=n1* +n2* •

közelítőleg

(programming effort)

közelítőleg

n-j_ N2 (N1+N2) log 2 ( ^ 2n2

Ez utóbbi formulával lehet kiszámítani közvetlenül a programlistából a program "pszichológiai" komple­

xitását .

Az irodalomban publikált komplexitás mértékek közül a McCabe ötletének volt a legnagyobb sikere [33].

McCabe a programok blokkdiagramjait irányított grá­

foknak tekinti, s a gráfok ciklomatikus számának kiszá mitásával az alapvető programágak számát határozza meg V(G)= élek száma - csúcsok száma +2

(53)

ahol - G egy P program blokkdiagrammja által meghatározott irányított grág,

-V(G) a P program McCabe szerinti komplexitás m é r t é k e .

McCabe javasolja, hogy egy önálló program egység, egy modul V(G) értéke ne haladja meg a lo-et. Szerinte

ily módon biztosítani lehet az egyszerű és áttekint­

hető programszerkezetet.

McCabe ötletének finomításával G.J. Myers Гз б]}, és módosításával G. Oulsnam Г38Д foglalkozik. Halstead és McCeb módszereinek kísérleti alkalmazását és rész­

letes értékelését B. Curtis és kutatócsoportja végezete el E 63. Szerintük a McCabe féle komplexitási mérték inkább a programok számítási, mintsem a pszichológiai komplexitását méri; habár figyelemreméltó összefüggés tapasztalható a kísérleti eredményekkel alátámasztott intuitív pszichológiai és a számítási komplexitás kö­

zött. Vannak azonban a pszichológiai komplexitásnak olyan aspektusai, amelyeket sem McCabe, sem a Halstead féle mérték nem vett figyelembe. Ezért javasolják olyan űj komplexitás-mértékek definiálását, amelyek jobban tükrözik a programozó információ-feldolgozási és prob­

léma-megoldó képességét.

Éppen ez volt a célunk, amikor a PROLOG programok szer­

kezeti bonyolultságát vizsgálva bevezettünk űj komp­

lexitás mértékeket. Mivel a PROLOG "nagyon magas szintű nyelv, a probléma-megoldás általános szerkezete sokkal jobban tükröződik magukban a programokban, mint a hagyó

(54)

mányos algoritmikus nyelvek esetén. így a logikai programozás eleve strukturált, hierarchikus szer­

vezettsége megkönnyítette számunkra, hogy olyan programegységeket találjunk, amelyek mérete, és mennyisége befolyásolja a programok érthetőségét, módosíthatóságát, azaz a "pszichológiai komplexi­

tást" .

3,2. PRIMLOG - A PROLOG EGY M E G S Z O R Í T Á S A

A strukturált programozás elveinek megfelelően be lehet vezetni a PROLOG-ban olyan szintaktikus

megszorításokat, amelyek csak a legegyszerűbb program- szerkezetk használatát engedik meg( PRIMLOG = PRIMitiv p r o L O G ). Ezen egyszerű programszerkezetek definiá­

lásával és egy erre épülő programtervezési módszer bevezetésével az volt a célunk, hogy a programok jól áttekinthetőek, könnyen módosithatóak legyenek, s ezzel párhuzamosan a szemantikus hibák csökkenését, a teszte­

lési idő lerövidítését vártuk [18].

Az alapvető programszekezeteket partícióknak neveztük.

A TASK partíciót kivéve - amely a feladat megadását definiáló célállitás - egy partició olyan kiózok so­

rozata, amelyek pozitiv atomjai ugyanazt a relációt tartalmazzák. A szintaktikus megszorítás kulcsszáma a a kettő (2)

- a p a r t i d o n belüli kiózok száma,

- egy partíción belüli negativ atomok száma, - egy atomon belül az argumentumok száma,

- és egy argumentumon belül az operátorok száma

(55)

maximálisan kettő lehet. (Kivételt képez a DATA BASE p a r t i d é , amely olyan egyszerű, hogy a benne lévő kiózok számára nem tettünk kikötést).

Egy PRIMLOG program particiók sorozata. 5 különböző tipusú p a r t i d é t definiáltunk: TASK, AND, OR, RECURSION és DATA BASE. Minden program egy TASK partícióval kez­

dődik, és ezen kivül még legalább egy DATA BASE p a r t i d ­ ét kell hogy tartalmazzon.

A particiók definiciója* :

TASK: -R( 6-L, 62 ) - Р(РХ /Р2 )•

AND: +R

(T1'T2 } - A(

61'62 ) - B(

p l'p 2 ) ’ OR: +R

(t1't2 } - A(

çl ' Ç2 * * +R (6r 62 ) - B(

P 1'P 2 )‘

RECURSION: +R (t^, t2 ).

+R

U lf

62 ) - A ( ç x ,?2 ) R( P]^, P2 ) ■ vagy

* Egy A <-Bl AB2 f o r m á j ú i m p l i k á c i ó t a PROLOG m a g y a r v e r z i ó j á n a k m e g f e l e l ő s z i n t a k t i k u s k o n v e n c i ó s z e r i n t +A —B 1 - B 2 f o r m á v a l f e j e z ü n k k i .

(56)

+ R ( 6 r ,62 ) - A ( ç lf Ç 2 }

" R (Рд_» P 2 }

+ R ( T 1 (,T2 ) •

D A T A BASE: + R

( T 1*’ T 2 ) ' + R (P]_.,p 2 ) -

+R (6^,6 2)*

ahol R, P, А, В különböző bináris relációjelek;

T1'T212'6 1'6 2'P1 ' P 2 termek, amelyekben legfeljebb két különböző függvényjel szerepel­

het.

Egy PRIMLOG program Írásának algoritmusát a következő blokk diagramban reprezentáljuk (13. ábra)

(57)

JELÖLES s - az akció tovább bomlik 1 - terminális akció

13. abra

(58)

A PRIMLOG programfejlesztési módszert úgy hasonlí­

tottuk össze az Ad-hoc PROLOG programozással, hogy elkészítettük a 2.2.1. fejezetben tárgyalt paneles lakásalaprajz variációkat tervező program előké­

szítő alprogramjának PRIMLOG változatát. A két prog­

ramot ugyanazon a számitógépen futtattuk, a Poly­

technic of the South Bank, London DEC-lo tipusu számitógépen. Azonos input adatra a két program vál­

tozat ugyanazt az outputot adta, habár a programok szerkezetei erősen elütöttek egymástól, lásd. 14, 15. ábra. Megvizsgáltuk a programok hosszát, a fu­

tási időt és m e m ó r i a igényt is, s a következő konk­

lúzióra jutottunk:

1. A PRIMLOG program szerkezete egyenletesen átte­

kinthető, világosan látszik rajta a bináris de- kompozició szisztematikus használata, ugyanakkor a PROLOG program szerkezete kiegyensúlyozatlan, néhol egyszerű, néhol nagyon bonyolult dekom- poziciós struktúrát tartalmaz.

2. A PRIMLOG változat tesztelési ideje rendkívül rövid volt, mindössze 3 szemantikus hibát kellett korrigálni. A PROLOG program szemantikus hibáira nem tudunk pontos adatot mondani, mivel annak be- lövése három évvel előbbre nyúlik vissza, de számuk jóval több volt, kb. lo-12. S habár nem szabad fi­

gyelmen kivül hagyni, hogy a PROLOG változat szü­

letett először és a PRIMLOG változat másodszor, és egy második program mindig jobb mint az első, a szemantikus hibák csökkenésére bizonyára erős ha­

tással volt az egyszerű és áttekinthető program­

szerkezet is.

(59)

14 . ábx'a

JEL: C D " UJ PARTÍCIÓ Ц ” MÁR DEFINIÁLT PARTICIO/KLOZ E h BEÉPÍTETT p r e d i k á t u m

(60)

15.ábra

(61)

3. A PRIMLOG program hossza több mint a két­

szerese a PROLOG programnak, az előbbi 53, az utóbbi 24 particiót tartalmaz. Ennek megfele­

lően a memória-igény is megnövekedett 1699 szóról 28o3 szóra.

4. A PRIMLOG program hierarchikus szintjeinek szá­

ma lo, több mint kétszerese a PROLOG program megfelelő adatának, amely 4. Ezt egy kissé sok­

nak találtuk, hiszen a globális áttekinthetősé­

get rossz irányban befolyásolja a hierarchikus szintek ilyen mértékű növekedése.

5. A vizsgált feladat futási idejében nincs lé­

nyeges különbség, PROLOG: 15,13 sec. PRIMLOG:

17,45 sec.

6. A PRIMLOG program önálló dekompoziciós egységeit, a partíciókat túlságosan egyszerűnek találtuk.

Egy partició néhol igen kevés gondolatot realizált, s ügy éreztük, hogy a programozó munkáját sok

esetben nem könnyítették, hanem nehezítették a rákényszerült szigorú dekompoziciós szabályok.

Az 1. és 2. pontban felsorolt előnyöket és a 3.f 4. és 6. pontban összefoglalt nyilvánvaló hátrányokat egybe­

vetve arra a meggondolásra jutottunk, hogy a PRIMLOG alapötlete jó, de előnyösebb megvalósításához a defi­

níció némi korrekciójára lenne szükség. Több gondolatot

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

sen különböző lehet attól függően, hogy a processzek egy közös elérésű adatterületen keresztül kommunikálnak-e, vagy olyan különálló processzorokban futnak,

[r]

SZÁMÍTÁSTECHNIKÁI ÉS AUTOMATIZÁLÁSI KUTATÓ INTÉZETE. PRINCIPLES OF COMPUTER AIDED SYSTEM

Hogy a beszélgetés intelligens, vagy sem, azt a külső megfigyelő dönti el, mégpedig úgy, hogy ha a beszélge­.. tés témájában történő dialógus úgy végződik,

tosan teljesülnek.. Láttuk, hogy ha 'C Sperner-rendszer, akkor ti több teljes családnak is lehet kulcsrendszere... Ha ^ Ç metszetfélháló, akkor létezik

Ez a két tipus külső és belső megfogásra is jellemző lehet, a- mikor a megfogó ilyen belső kialakítású tárgyakkal dolgozik és nem célszerű a külső

mét ás integritását sértenék Г fogalom törlése, új integritás vagy kényszerités bevezetése), vannak azonban olyan változtatások (áj fogalom bevezetése,

Rendezési kritérium azonosító SFD Egyszeres mező definíció. /Lásd