Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 45 reacties
Bron: NIST

De Amerikaanse wetenschappers van het Nationale Instituut van Standaarden en TechnologiŽn (NIST) zijn bezig met een programmeertaal die computers in staat stelt de commando's die de gebruiker geeft in de juiste context te zien. Deze nieuwe standaard, genaamd ISO 18629, bevat tot nu toe ongeveer driehonderd begrippen die de machine een primitieve vorm van kunstmatige intelligentie moet geven. Als voorbeeld geeft het NIST de twee verschillende opdrachten die allebei de term 'voordat' gebruiken: 'Beschilder het product voordat het verscheept wordt' en 'Voer koelvloeistof toe, voordat het gemaal aangaat'. In het eerste geval moet de eerste opdracht worden beŽindigd voordat door mag worden gegaan, terwijl in het tweede geval de eerste opdracht eerst moet worden begonnen, maar verder tegelijkertijd moet worden uitgevoerd met de tweede opdracht.

Het doel van deze nieuwe standaard is machines te laten nadenken over de consequenties van de handelingen die ze uitvoeren. Huidige programmeertalen geven de machine een reeks opdrachten die hij vervolgens een voor een uitvoert, zonder te evalueren of het gewenste resultaat bereikt wordt, tenzij de programmeur dit uitdrukkelijk vraagt. Het voorstel van NIST is al voor tweederde goedgekeurd door de Internationale Standaard Organisatie. Zodra het geheel is aangenomen als een officiŽle standaard, zullen fabrikanten beginnen met het implementeren ervan.

Moderatie-faq Wijzig weergave

Reacties (45)

Ik vind het eerlijk gezegd allemaal maar vaag. Als programmeur kan je echt geen termen als "x voordat y" en dergelijke gaan gebruiken, want dan gaat de structuur in je programma echt totaal onduidelijk worden. Het wordt dus afwachten...
zegt de term 'fuzzy logic' je niks dan? Het hoeft niet altijd even logisch of gestructureerd te zijn om toch te werken.
Een vlieg vliegt ok niet altijd recht vooruit maar komt toch wel bij z'n eten. En zijn 'programmatuur' is toch wel heel simpel.

@biermeester
volgens mij snap je het niet wat ik wil zeggen. Hoe kan eenvoudige code nou fuzzy zijn? Vich had het over de structuur in zijn programma. Wat boeit het nou of je programma voor jou onduidelijk is als het snel tot een juiste oplossing komt?

Om bij die vlieg te blijven: zijn code is links of rechts? alleen hij doet dat tig keer voordat hij er is.
Hij doet niet: even meten, even denken, nog eens kijken... 56.2 graden stuurboord, maar: rechts, ... duh... links, duhh. rechts...duhhh rechts, ETEN. . Hij denkt niet echt veel na en hij vliegt wat warrig, maar hij komt er wel zonder veel na te denken.
De term 'fuzzy logic' gaat niet over logica die 'fuzzy' is, maar over logica die 'fuzzy' zaken beschrijft. Als logica niet logisch is, is het geen logica ;)
Fuzzy logic is an extension of Boolean logic dealing with the concept of partial truth. Whereas classical logic holds that everything can be expressed in binary terms (0 or 1, black or white, yes or no), fuzzy logic replaces boolean truth values with degrees of truth.
Meer uitleg over Fuzzy Logic is hier te vinden.

Simpel voorbeeld over context: Het is buiten ongeveer 35 graden en zomer. Binnen is het 25 dankzij de airco. 25 graden is dus lekker koel.
Maar 25 graden is niet koel als het winter is. Dan is het lekker warm.

Maar wat dan nog steeds hetzelfde kan blijven is dat we de temperatuur aangenaam ervaren, echter vanuit een andere context. Zo zijn er talloze voorbeelden die voor een mens heel logisch zijn, maar voor computers stukken minder.

Of: Je loopt over een drempel en je bent nog met 1 voet in de woonkamer, maar voor het grootste gedeelte in de keuken. Als je fuzzy logic aanhoud, dan ben je aanwezige in beide vertrekken, beide gegevens zijn immers gedeeltelijk waar. Als je vraagt: Ben je in de kamer is het antwoord ja, maar ben je in de keuken? Ook waar. Ben je in beiden? Ook waar. Fuzzy Logic is veel minder zwart/wit 0/1 als de gebruikelijke logica en is eerder in staat om te anticiperen op veranderende omgevingen en voorwaarden dan de tot op heden nog steeds gebruikte logica. Bij de huidige logica liggen immers veel dingen al vast, zijn veel dingen al bepaald en programmeert men binnen een stramien van voorwaarden van een ontwerp. Fuzzy Logic dwingt af dat er gekeken wordt op voorhand naar mogelijke gevolgen, de grondslag van bijna elk denkproces en tevens ook iets wat wij onze kinderen allemaal leren.. Als je kattekwaad uithaalt, dan krijg je straf. Om er voor te zorgen dat het kind nadenkt over de consequentie van zijn acties binnen een bepaalde context ;)
De logica is bij Fuzzy Logic wel degelijk fuzzy. Het gaat er niet om of het strikt juist of onjuist is maar "beter", "redelijk" enz.

Een voorbeeld van fuzzy logica kan bijvoorbeeld de afstandsafhankelijke cruise control.

Deze moet afhankelijk van de snelheid een vaste tussenruimte bewaren. Maar wat als de tussenruimte te klein of te groot wordt? Een normaal logisch systeem zou bij een kleine tussenruimte vol op de rem trappen en de ruimte zo snel mogelijk groter laten worden en bij een groot gat gelijk gas bij totdat de maximale snelheid bereikt is of het gat precies groot genoeg geworden is. Dat rijdt natuurlijk niet echt prettig. Een fuzzy logic systeem remt bij een te klein gat "iets" af en geeft bij een groot gat "een beetje" gas bij. Hoe die wazige termen "iets" en "een beetje" worden ingevuld hangt daarbij af van een hoop factoren, maar het resultaat is een stuk prettiger rit.

Ander voorbeeld: Een kind weet dat als je iemand doodschiet, je de gevangenis ingaat. Vrijwel niemand pleegt dan ook moorden in Nederland. Echter, vrijwel iedere voetganger loopt regelmatig door een rood stoplicht. Beide is verboden, maar het ene is wat meer verboden dan het andere.
Het beste voorbeeld van verschil tussen normale logica en FuzzyLogic dat ik ooit tegenkwam: (Uit de Matlab-documentatie):

Een computer zegt: 'Hee, er komt van bovenaf in een hoek van 90 graden op een afstand van 24,3 meter een betonblok van 904,2 kg op je af met een snelheid van 80,6 m/s.
Een mens daarentegen zal denken: Wegrennen!

Ook hier gaat het, net als in de voorbeeldtext, erom dat een computer zou moeten nadenken over consequenties in plaats van droog wat exacte gegevens te bekijken, en uit het voorbeeld valt gelijk te zien waarom dit zinvol kan zijn.
edit: reactie op pietje puk

Meer verboden dan verboden gaat niet hoor...
Lijkt een beetje op ''hij is blind.. maar zij is nog blinder''
Het verschil zit hem in de consequenties van de actie..
Moord gebeurt minder omdat de consequenties (bijna altijd) groter zijn.

Dat willen ze dus ook met de machines,.. na laten denken.
Er zijn volgens jou geen gradaties in blindheid?
Je hoeft er ook geen besturingssysteem in te schrijven. Een dergelijke programmeertaal is prima geschikt als scripttaal, of voor mensen wiens hoofdtaak niet programmeren is.

Zelf gaan m'n haren overigens recht overeind staan van dit soort talen, geef mij maar C of Fortran zoiets laags :Y) Maar het heeft zeker wel een toepassingsgebied.
wel toepasbaar. Maar wordt die programmeer taal niet erg traag tov van veel van de huidige programmeertalen
Dat hoeft niet, het is maar net hoe de compiler de code interpreteert. Uiteindelijk wordt het vertaald naar machinecode en kan het net zo snel zijn als bijvoorbeeld C.
Ik dacht dat we daar de ; voor hadden?
Voor spraak sturing binnen een programma lijkt het me wel handig. Hoef je niet langer alles rechtlijnig te brengen, maar kan je gewoon alles wat je wil doen in willekeurige volgorde opdreunen waarna je compu uitvist hoe het dan moet gebeuren.

Voor puur proggen ben in het met Vinch eens, slechte zaak als je op bovenstaande manier gaat proggen, teveel omwegen. Lijkt me niet efficient
Voor puur proggen ben in het met Vinch eens, slechte zaak als je op bovenstaande manier gaat proggen, teveel omwegen. Lijkt me niet efficient
Deze manier is wiskundig correct, het leuke hieraan is, is dat het kan worden geschreven als iedere willekeurige (gecheckte) optimalisatie. Dit hoeft dus helemaal geen intepreter taal te worden, maar kan net als andere functionele of declaratieve taal tot object code worden gecompileerd. (uiteraard zonder bugs...)
En de zoveelste logische taal... We waren al lang zover dat computers logische deducties konden maken. Geef een computer een ontologie (verzameling logische stellingen) en een aantal algoritmes om deze logische stellingen te interfereren en een computer kan logische uitspraken doen. Het grootste probleem tot nu toe is dat mensen die ontologien moeten bouwen, en daar juist een standaard voor zou moeten komen. Er zijn een aantal van dat soort projecten zoals Cyc. Maar ik denk dat daar het grootste probleem ligt. niet zozeer bij de semantiek van een ontologie. Het combineren van verschillende ontologie-en is erg problematisch, omdat elke 'programmeur' (knowledge engineer) z'n eigen voorkeuren heeft en ideeen.

Het meest gebruikte is prolog als logische taal, en daar kun je over discussieren tot je scheel ziet, maar het blijft een van de meest gebruikte talen voor logica. Waarom we dan weer zo nodig een andere taal moeten hebben.
Waarom we dan weer zo nodig een andere taal moeten hebben.
Toegeven, ik heb er weinig verstand van, maar ik denk dat ik het antwoord in een FAQ van NIST gevonden heb:
How does PSL compare to other process modeling languages (e.g., IDEF0)?

PSL's primary role is not envisioned to be a process modeling language; it will be an interchange language which would allow manufacturing applications to exchange discrete process data. For example, an IDEF3-based application could use PSL to exchange process models with a Petri net-based application, in the same way that STEP can be used to exchange product models among CAD systems.

Another aspect that makes PSL unique its underlying, formal ontology. All concepts in PSL are formally defined, using the Knowledge Interchange Format (KIF), to eliminate the ambiguity usually encountered when exchanging information among disparate applications. This ontology provides the backbone that enables and ensures correct translations.


Voor zover ik begreep is PROLOG alleen een programmeertaal. PSL is dan meer een poging om ontologie te standaardiseren, met als gevolg later in de ontwikkeling, een programmeertaal + grammatica.
Ik dacht dat RDF en The Semantic Web hier al mee bezig waren...

Lijkt me niet zo handig om weer twee concurrerende standaarden te ontwikklen. Maar misschien weet iemand van een fundamenteel verschil tussen beide bewegingen?
Iedereen trekt gelijk weer de wildste conclusies over allerlei toepassingen...

Uit het origineel:
ISO 18629 uses artificial intelligence (AI) and mathematical logic to represent computer commands in the context of a manufacturing plan en The ISO 18629 language is especially suited for the exchange of process planning, validation, production scheduling and control information for guiding manufacturing processes

Het is dus vooral een beschrijvingstaal voor productieprocessen (en daar zijn termen als "voordat", "tijdens" etc inderdaad heel erg nuttig).

Dit is dus wel een heel beperkt toepassingsgebied en de toegepaste logica is nog steeds hard. dwz. zelfde input geeft 100% van de tijd dezelfde output. (Dat is bij echte AI niet zo)

Het is dus geen wondertaal waarmee de mooiste AI systemen gebouwd gaan worden en het is ook geen scripttaal waar "normale gebruikers" ineens computers mee kunnen programmeren. (Dat zal ook nooit gebeuren ook trouwens)

btw. Over scripttaal gesproken. Applesript van Apple (wie anders) is net zo iets als dit. Maar dan op het deelgebied van het besturen van een Apple computer.
10 leer programmeren VOORDAT je een programma wilt schijven
20 goto 10
Syntax error in line 10
Hihi,

Maar dan moeten de foutmeldingen ook fuzzy natuurlijk:

"The syntax in line 10 is far from perfect"
Ik zie het grote verschil niet met veel huidige logische programmeertalen niet.... :?

Je geeft nu toch ook met if, else, or, and etc etc aan welke voorwaarden moet worden voldaan voordat een andere actie wordt ondernomen.

Vind dit nou niet echt AI-achtig.
Moet je intelligent zijn om goed te kunnen schaken?

Vind je van wel, dan moet je een schaakcomputer of programma ook intelligent noemen. Het is nogal een vage term hoor, kunstmatige intelligentie. Ten eerste is er geen duidelijke definitie van de term intelligentie (zie schaak voorbeeld), ten tweede is er het woord kunstmatig waardoor het helemaal onduidelijk wordt.
Mensen schaken op een hele andere manier dan computers. Een mens moet redelijk intelligent zijn om te kunnen schaken, een computer berekent simpelweg elke mogelijke zet vanaf de huidige situatie, geeft die een waardering en zet uiteindelijk de zet met de hoogste waardering.
Is de manier waarop dan het belangrijkst? Volgens mij gaat het om het resultaat.
Precies.. de meeste schaakcomputers tot nu toe hebben het wel eens af moeten leggen simpelweg omdat de menselijke (soms onberekenbare) factor niet altijd in te calculeren valt, niet in een hokje te stoppen is.
De onberekenbare factor kan met fuzzy logic echter wel deels benaderd worden, omdat de logica hiervan meer lijkt op die van de mens zelf.
Hoe je het ook wendt of keert, met if-then-else etc. bouw je lineare processen.
Met het voorbeeld zoals 'voordat' uit het artikel kun je 2 processen( of zo je wilt, functies ) parallel laten uitvoeren. Dit regel je dus al in je hogere programmeertaal.
IMO is dit een voorbereiding om threading vanuit je hogere programmeertaal te gaan regelen.
Er is meer dan alleen 3gl.
de huidige 4gl zijn ook al tot een hoop hoogstandjes in staat. Denk bijvoorbeeld maar aan het ondergewaardeerde prolog.

-R-
Het lijkt erop dat dit meer voor planningssystemen is en dus niet te vergelijken valt met prolog. Prolog is een van de meest gebruikte logische programmeertalen, maar het lijkt erop dat dit niet zo algemeen gezien moet worden. Planningssystemen maken is weer een vak apart en ik denk dat daar deze taal om de hoek komt kijken.

Op het gebied van AI lijkt het me ook handig om een standaard neer te gaan leggen wat betreft standaardbegrippen. Hoe bijvoorbeeld een appel te noemen, wat zijn de eigenschappen van een appel, etc. Hoe maak je een computer duidelijk dat ie 1 niet specifieke appel moet halen. (Get(TypicalInstanceOf(Apple))). Dat soort dingen kunnen wel gestandaardiseerd worden denk ik en dan geimplementeerd worden in verschillende talen, waaronder prolog. Dan ligt er een gedegen, herbruikbare basis voor systemen die redeneren.
Dat is exact wat ik zei, inplaats van vast te leggen in welke taal we een ontologie schrijven is het belangrijk hoe we objecten definieren binnen die ontologie (bijvoorbeeld die appel). Ik gok dat ik een andere logische beschrijving zou geven als jij die zou geven voor die appel.

En voor plannings systemen hebben we al zat andere standaarden. STRIPS en ADL zijn de meest gebruikte. Beide talen werken met POP algoritmes of HTM algoritmes. Dus daar zie ik ook op het moment geen problemen.
Ik denk dat niet alleen NIST hiermee bezig is, aangezien het dan vermoedelijk een ANSI-standaard ipv een ISO-standaard was geweest.
Het doel van deze nieuwe standaard is machines te laten nadenken over de consequenties van de handelingen die ze uitvoeren.
Precies alsof ze zich nog zouden gaan schamen ook als het verkeerd zou zijn...

Op dit item kan niet meer gereageerd worden.



Apple iOS 10 Google Pixel Apple iPhone 7 Sony PlayStation VR AMD Radeon RX 480 4GB Battlefield 1 Google Android Nougat Watch Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True