Glauber
Glauber är en vetenskaplig upptäcktsmetod skriven inom ramen för beräkningsvetenskaplig filosofi . Det är relaterat till maskininlärning inom artificiell intelligens .
Glauber skrevs, bland andra program, av Pat Langley, Herbert A. Simon , G. Bradshaw och J. Zytkow för att demonstrera hur vetenskaplig upptäckt kan erhållas genom problemlösningsmetoder, i deras bok Scientific Discovery, Computational Explorations on the Creative Mind .
Deras program simulerar historiska vetenskapliga upptäckter baserat på de empiriska bevis som var kända vid tidpunkten för upptäckten.
Glauber fick sitt namn efter Johann Rudolph Glauber , en alkemist från 1600-talet vars arbete hjälpte till att utveckla syra-basteori . Glauber (metoden) återupptäcker lagen om syra-alkali-reaktioner som producerar salter, med tanke på ämnens kvaliteter och observerade fakta, resultatet av att blanda ämnen. Från den kunskapen upptäcker Glauber att ämnen som smakar bittert reagerar med ämnen som smakar surt, vilket ger ämnen som smakar salt.
Med några få ord, lagen:
- Syra + Alkali --> Salt
Glauber designades av Pat Langley som en del av hans arbete med upptäcktsheuristik i ett försök att få en dator att automatiskt granska en mängd värden och egenskaper och göra oberoende analyser av dem. När det gäller Glauber var målet att ha en autonom tillämpning som kunde uppskatta, till och med perfekt beskriva, karaktären hos en given kemisk förening genom att jämföra den med besläktade ämnen. Langley formaliserade och sammanställde Glauber 1983.
Programvaran försågs med information om en mängd olika material som de hade beskrivits av 1600-talets kemister, innan det mesta av modern kemisk kunskap hade avslöjats eller uppfunnits. Kvalitativa beskrivningar som smak , snarare än numeriska data som molekylvikt , programmerades in i applikationen. Kemiska reaktioner som var kända på den tiden och skillnaden mellan reaktanter och produkter tillhandahölls också. Från denna kunskap skulle Glauber ta reda på vilka ämnen som var syror , baser och salter utan någon kvantitativ information. Systemet undersökte kemiska ämnen och alla deras mest sannolika reaktioner och korrelerar den förväntade smaken och relaterad surhet eller sälta enligt regeln att syror och baser producerar salter.
Glauber var ett mycket framgångsrikt framsteg inom teoretisk kemi som utförts av dator och det, tillsammans med liknande system utvecklade av Herbert A. Simon inklusive Stahl (som undersöker oxidation ) och DALTON (som beräknar atomvikt ), hjälpte till att bilda grunden för alla nuvarande automatiserade kemisk analys.
Glaubermetoden
Informationsrepresentation (datastrukturer)
Glauber använder två predikat: Reacts och Has-Quality, representerade i Lisp-listor enligt följande:
- (Reagerar Inmatningar {reaktant 1 reaktant 2 ...} Utmatar {produkt 1 produkt 2 ...})
- (Har-Quality Object {substans} kvalitet {värde})
För sitt experiment använde författarna följande fakta:
- (Reagerar ingångar {HCl NaOH} Utgångar {NaCl})
- (Reagerar ingångar {HCl KOH} Utgångar {KCl})
- (Reagerar ingångar {HNO 3 NaOH} Utgångar {NaNO 3 })
- (Reagerar ingångar {HNO 3 KOH} Utgångar {KNO 3 })
- (Har-Quality Object {HCl} smakar {Sur})
- (Has-Quality Object {HNO 3 } Smakar {Sur })
- (Has-Quality Object {NaOH} Smakar {Bitter})
- (Has-Quality Object {KOH} Smakar {Bitter})
- (Har-Quality Object {NaCl} Smakar {Salty})
- (Has-Quality Object {NaNO 3 } Smakar {Salty})
- (Has-Quality Object {KCl} Smakar {Salt})
- (Has-Quality Object {KNO 3 } smakar {salt})
Upptäcker följande lag- och likvärdighetsklasser:
- Salter: {KNO 3 , KCl, NaNO 3 , NaCl}
- Syror: {HCl, HNO 3 }
- Alkalier: {NaOH, KOH}
- ∀ alkali ∀ syra ∃ salt (reagerar Ingångar {syra, alkali} Utgångar {salt})
- ∀ salt ( Objekt av hög kvalitet {salt} smakar {salt})
- ∀ syra (föremål med kvalitet {syra} smakar {surt})
- ∀ alkali (föremål med kvalitet {alkali} smakar {bitter})
Den moderna notationen med strängar som: NaOH, HCl, etc., används precis som korta substansnamn. Här menas inte ämnenas kemiska struktur, som inte var känd vid tiden för upptäckten; programmet fungerar med vilket namn som helst som användes på 1600-talet som regia , muriatsyra , etc.
Förfaranden
Glauber bygger på två procedurer: Form-Class och Determine-Quantifier. Proceduren Form-Class generaliserar Reacts-predikaten genom att ersätta ämnesnamnen med variabler som sträcker sig på ekvivalensklasser bestämt av en kvalitet vars värde särskiljer ämnena i varje klass. I experimentet designat av dess författare, delas ämnena in i tre klasser baserade på värdet av smakkvaliteten baserat på deras värden: syror (sura), alkalier (beska) och salter (salt).
Glaubers huvudprocedur
- Indata : Reacts och Has-Quality predikatuppsättningar
- Output : Vid framgång returnerar en generaliserad version av Reacts predikatet vars variabler sträcker sig över ekvivalensklasserna och ett nytt Class-predikat som är som Has-Quality som har en namnklass istället för substansnamn: ( Har-kvalitet {class-name} kvalitet {value})
- Om det inte finns fler ämnesnamn i Reacts-predikaten så avsluta
- bearbeta Reacts-predikaten med Form-Class-proceduren
- bearbeta resultatet av föregående steg med Determine-Quantifier
- gå till steg 3
Form-klass
- Ingång : predikatuppsättningarna Reacts och Has-Quality.
- Utdata : en ny ämnesklass, en ny Has-Quality och en ny Reacts-predikatuppsättning
- Räkna antalet förekomster av varje kvalitet {värde} i Has-Quality-predikaten
- Välj kvalitetsvärdet med det största antalet förekomster, vilka ämnen som finns i Reacts-predikaten
- Skapa ett namn för klassen
- Generera en ny Has-Quality-predikatuppsättning genom att ta bort alla predikaten i Has-Quality med den valda kvaliteten {value} och lägga till predikatet (Has-Quality {class-name} quality {value}) till Class-predikaten där klassnamn är namnet som erhölls i steg 3
- Skapa en ny Reacts-predikatuppsättning genom att ersätta namnet på ämnet i klassen som bildades i steg 2 med namnet som skapades i steg 3
- Skapa en ny klasstillägg genom att associera namnet som genererades i steg 3 med uppsättningen av alla ämnen i klassen som valdes i steg 2
Bestäm-kvantifierare
- Indata : predikatuppsättningarna Reacts, Has-Quality och Class (genererade av Form-Class)
- Utdata : En avsiktlig kvantifierad klass som motsvarar den extensionsklass som genereras av Form-Class, en ny Reacts-predikatuppsättning utökad med lämplig kvantifierare av den senast upptäckta klass mottagen från Form-Class
- Kvantifiera regeln universellt för att bestämma klassen
- (Has-Quality {class-name} quality {value}) => (∀ class-name (Has-Quality {class-name} quality {value}))
- Generate Reacts-predikat som ersätter varje ämne i den nya klassen för dess klassnamn i Reacts-predikaten
-
om alla predikaten som genererades i föregående steg finns i den ursprungliga uppsättningen,
- kvantifiera universellt
- annars kvantifiera existentiellt