In een vorige entry gesproken over het feit dat binnen Ai vaak gaat om binnen uit alle mogelijke combinaties van symbolen, een specifiek combinatie te vinden die we dan het antwoord noemen.
Tevens aangegeven dat alle mogelijke combinaties van symbolen vaak wordt beperkt door het geven van regesl waaraan de combinaties moeten voldoen of door een opsoming van combinaties waaruit te kiezen valt.
In principe specificeert een graaf welke combinates van symbolen voor kunnen komen. Een graaf beperkt dus het aantal mogelijke combinaties. Vaak is de graaf zo groot dat we niet in een keer alles kunnen overzien en moeten we met een deel van de infomratie uit de graaf werken.
Er zijn twee manieren om informatie uit de graaf te halen:
1. door het doorlopen van de graaf (wordt vaak gedaan bij programmeer cusrsssen)
2. Door te redeneren over de graaf. Dit wordt vaak in de eerste orde logica gedaan.
maandag 27 november 2017
zaterdag 4 november 2017
Mooie toepassing AI (kinderen leren robot schrijven)
Hardware, software en functionaliteit
Hardware
Een intelligent systeem is net als ieder ander artefact gemaakt van verschillende materialen. De beschrijving van dit systeem in termen van natuurkundige en scheikundige eigenschappen zoals vorm, gewicht, geleidend of niet, doorzichtig of niet, reagerend op licht of niet, noem ik het hardware model van het systeem. Let er hierbij op dat je dus geen enkele uitspraak doet over het doel en het gebruik van het systeem.
Een intelligent systeem is net als ieder ander artefact gemaakt van verschillende materialen. De beschrijving van dit systeem in termen van natuurkundige en scheikundige eigenschappen zoals vorm, gewicht, geleidend of niet, doorzichtig of niet, reagerend op licht of niet, noem ik het hardware model van het systeem. Let er hierbij op dat je dus geen enkele uitspraak doet over het doel en het gebruik van het systeem.
Stel je hebt bovenstaande telefoon. Hoe ziet dan de hardware beschrijving eruit? Als hulpmiddel doe je net of je een alien bent van Mars, je bent net geland op aarde je vindt bovenstaande item op het midden van de weg. Hoe zou jij dan deze telefoon beschrijven?
Je zou opmerken dat een klein rechthoeking ding was dat grotendeels een zwarte kleur heeft.
-
Eén zijde bestaat uit hele kleinte puntjes de verschillende kleuren licht uitstralen
Deze zijde reageert ook op aanraking. De puntjes veranderen soms van kleur en soms begint het ding te trillen en creëert geluidsgolven. -
Je merkt ook op dat er een element is die reageert op luchtdrukwijzigingen en er is een element die kleine veranderingen in de luchtdruk kan genereren.
-
Je merkt ook op dat er elementen aan boord zijn die reageren op verstorigne in het electrisch veld en die ook reageren op verstoringen in het electrisch veld.
-
Deze verstoringen vinden plaats in verschiilende frequenties. Bijvoorbeebeeld5,8GHz of 1800 MHz.
Het gebruik
Het doel van ontwerpers is om dit soort apparatuur bruikbaar te maken voor mensen
For example: We
might come up with the idea to talk in the mic, the air vibrations
are transferred throught the machine and converted in electromagemtic
disturbances. We make second one which translate the electromagetic
disturbances in to airwaves (through the speakers)
Even a better idea
is to make use of the side that response to touch, we might us it to
enter an unique code, translate that into disturbances into the
magnetic field so that only items that know this number respond to
the disturbance (aka phone number!)
Of course as a
software designer we spent a lot of time behind our IDE, but this is
only a partial view on the system. The hardware (the physical view)
is as equally important, because in the end it is the behavior of
the hardware of the systems that helps. Even a monitor is hardware,
the symbols on your screen are nothing more than glowing lights
(there small and there are a lot of them)
Symbolen
Als ik de apps op mijn telefoon bekijk, zijn er zeker veertien apparaten die daardoor overbodig zijn geworden. Ik gebruik mijn mobiel nu als
- telefoon
- brievenbus
- krant
- wekker
- stopwatch
- kookwekker
- kladblokje
- fotocamera
- routekaart (herinner je dat gevouw nog?)
- zaklamp
- rekenmachine
- walki-talki
- televisie
- cassetterecorder
Dit vertelt mij twee dingen, namelijk dat een smartphone een heel flexibel in te zetten apparaatje is, maar ook dat er blijkbaar tussen al die verschillende toepassingen een overlap bestaat. De overlap tussen al die applicatie is dat zijn symbolen ingevoerd, bewerkt en dan weer gepresenteerd worden (vaak in de vorm van beeld maar ook in de vorm van geluid)
Een symbool is een natuurkundige eigenschap of een reeks eigenschappen van materiaal waarbij men impliciet en soms expliciet afspreken dat deze eigenschappen naar iets anders verwijzen.
voorbeeld:
fysieke eigenschappen
- rechthoekig
- gedeeltelijk bedekt met materiaal dat alle lichtfrequenties refelcteert
- de rest is bedekt met een materiaal dal alleen de lichtfrequenties tussen 450–495 nm (blauw) reflecteert
Symboliek:
U betreedt een snelweg.
Symbolen
Als ik de apps op mijn telefoon bekijk, zijn er zeker veertien apparaten die daardoor overbodig zijn geworden. Ik gebruik mijn mobiel nu als
- telefoon
- brievenbus
- krant
- wekker
- stopwatch
- kookwekker
- kladblokje
- fotocamera
- routekaart (herinner je dat gevouw nog?)
- zaklamp
- rekenmachine
- walki-talki
- televisie
- cassetterecorder
Dit vertelt mij twee dingen, namelijk dat een smartphone een heel flexibel in te zetten apparaatje is, maar ook dat er blijkbaar tussen al die verschillende toepassingen een overlap bestaat. De overlap tussen al die applicatie is dat zijn symbolen ingevoerd, bewerkt en dan weer gepresenteerd worden (vaak in de vorm van beeld maar ook in de vorm van geluid)
Een symbool is een natuurkundige eigenschap of een reeks eigenschappen van materiaal waarbij men impliciet en soms expliciet afspreken dat deze eigenschappen naar iets anders verwijzen.
voorbeeld:
fysieke eigenschappen
- rechthoekig
- gedeeltelijk bedekt met materiaal dat alle lichtfrequenties refelcteert
- de rest is bedekt met een materiaal dal alleen de lichtfrequenties tussen 450–495 nm (blauw) reflecteert
Symboliek:
U betreedt een snelweg.
Modelleren zoekruimte (Object Orientatie)
The OO - Paradigm
The object-oriented paradigm emphasizes modularity and re-usability. The goal of an object-oriented approach is to satisfy the "open closed principle".
A module is open if it supports extension. If the module provides standardized ways to add new behaviours or describe new states.In the object-oriented paradigm this is often accomplished by creating a new subclass of an existing class. A module is closed if it has a well defined stable interface that all other modules must use and that limits the interaction and potential errors that can be introduced into one module by changes in another. In the object-oriented paradigm this is accomplished by defining methods that invoke services on objects. Methods can be either public or private, i.e., certain behaviours that are unique to the object are not exposed to other objects. This reduces a source of many common errors in computer programming.
Object-oriented modelling typically divides into two aspects of work: the modelling of dynamic behaviours like business processes and use cases, and the modelling of static structures like classes and components. OOA and OOD are the two distinct abstract levels (i.e. the analysis level and the design level) during OOM. The Unified Modelling Language (UML) and SysML are the two popular international standard languages used for object-oriented modelling.
Personal note: So for me Object Oriented is a way to look at the world. This view on the word is particularly handy when you want to construct or work with man made systems that have a lot of components working interdependently and where the requirements are likely to change in the foreseeable future. So good for Information systems development,but for designein an constructing houses other paradigms are more helpful.
Personal note 2: There is often confusion about what to model. In fact we often need two models. A model of how we look at reality (like A person is a client and when he steps into the train he is a passenger ) The we also need to model the system which maintains data about the real world. sometimes real world modelling is done with different paradigms (f.e. Entity - Relation Ship Modelling) than systems modeling.
Peronal Note: from a philosofical point of view there is no structure, since everything changes over time. So in order to decide what is structural an what is behavioural in our system, we need a purpose of the system, a time frame and a judgement about what might change and what remains. This is the world of Analysing and Design.
Visualizing objects and their interdependence (UML)
To visualize how the the components interact The Unified Modelling Language was developed.
UML 2 has many types of diagrams which are divided into two categories.[3] Some types represent structural information, and the rest represent general types of behaviour, including a few that represent different aspects of interactions. These diagrams can be categorized hierarchically as shown in the following class diagram:
Click here for audio-text lecture and feed it to the speech agent
Object-Oriented Language Features:
abstract data types
inheritance
object identity
Object-Oriented Database Features:
persistence
support of transactions
simple querying of bulk data
concurrent access
resilience
security
Industry Trends:
Integration and Sharing
Seamless integration of operating systems,
databases, languages, spreadsheets,
word processors, AI expert system shells.
Sharing of data, information, software
components, products, computing
environments.
Referential sharing:
Multiple applications, products, or objects share common sub-objects.
(Hypermedia links are then used to navigate from one object to another)
Object-oriented databases allows referential sharing through the support of object identity and inheritance.
A structure that is the set of attributes of the instances
A set of operations
A set of methods which implement the operations
Instantiation means generating objects, Ex. 'new' operation in C++
Persistence of objects: Two approaches
An implicit characteristic of all objects
An orthogonal characteristic - insert the object into a persistent collection of objects
a representation of a binary association
a representation of a ternary association
reverse reference
An integrated repository of information
that is shared by multiple users, multiple
products, multiple applications on
multiple platforms.
It also solves the following problems:
1. The semantic gap: The real world and the Conceptual model is very similar.
2. Impedance mismatch: Programming languages and database systems must be interfaced to solve application problems. But the language style, data structures, of a programming language (such as C) and the DBMS (such as Oracle) are different. The OODB supports general purpose programming in the OODB framework.
3. New application requirements: Especially in OA, CAD, CAM, CASE, object-orientation is the most natural and most convenient.
1. Sets of atomic values
2. Tuple-valued attributes
3. Sets of tuples (nested relations)
4. General set and tuple constructors
5. Object identity
Formal definition:
1. Every atomic value in A is an object.
2. If a1, ..., an are attribute names in N, and O1, ..., On are objects, then T = [a1:O1, ..., an:On] is also an object, and T.ai retrieves the value Oi.
3. If O1, ..., On are objects, then S = {O1, ..., On} is an abject.
Example: {[Name:John, Age: 30],
[Name:Mary, Friends:{Mark, Vicki}]}
(i1, atom, 'John')
(i2, atom, 30)
(i3, atom, 'Mary')
(i4, atom, 'Mark')
(i5, atom 'Vicki')
(i6, tuple, [Name:i1, Age:i3])
(i7, set, {i4, i5})
(i8, tuple, [Name:i3, Friends:i7])
(i9, set, {i6, i8})
The different types of links (relationships) in GSM are shown below.
A semantic model for the sales office automation example is shown below.
An entity-relationship model for the sales office automation example is shown below.
persistence
support of transactions
simple querying of bulk data
concurrency control
resilience and recovery
security
versioning
integrity
performance issues
DATA MODELS TO BE CONSIDERED:
Complex object model
Semantic data model such as Extended ER (EER) model, OPM model
NOT ALL OODB SUPPORTS SAME OBJECT-ORIENTATION, SAME DATA MODEL AND SAME SET OF FEATURES
ORION: Lisp-based system, built at MCC 1987.
Handles schema evolution and complex
object locking.
IRIS: Built at HP 1987. Functional data
model, version control, object-SQL.
Galileo: Built at Univ Pisa 1985. Strong
typed language, complex objects.
PROBE: CCA 1986.
POSTGRES: Univ. California, Berkeley 1990.
Extended relational database supporting
objects.
O2: O2 Technology.
Language O2C to define classes, methods
and types. Supports multiple inheritance.
C++ compatible.
Supports an extended SQL language O2SQL
which can refer to complex objects.
G-Base: Graphael 1987. Lisp-based
system, supports ADT, multiple
inheritance of classes.
CORBA: Standards for distributed objects.
GemStone: Servio Logic 1987, Beaverton,
Oregon. Earliest OODB supporting
object identity, inheritance,
encapsulation. Language OPAL is
based upon Smalltalk.
Ontos: Ontologic, 1988, Berlington,
Mass. C++ based system, offers C++
clients library. Ontos has a predecessor
called Vbase. Ontos model supports
encapsulation, inheritance, ability
to construct complex objects.
Object Store: Object Design Inc.
C++ based sustem. A good feature is that
it supports the creation of indexes.
Statics: Symbolics 1988. Supports
entity types, set valued attributes,
and inheritance of entity types
and methods.
SIM: Semantic Information Manager,
UNISYS 1987. Supports semantic data
model. Core system of the InfoExec
Environment of UNISYS. Uses the Semantic
Data Model of Hammer and McLeod 1981.
User can define entity types that can
inherit from one another. Attributes
of entities are like functions from
one entity to another.
Relational DB Extensions: Many relational
systems support OODB extensions.
1. User-defined functions (dBase).
2. User-defined ADTs (POSTGRES)
3. Very-long multimedia fields (BLOB or Binary Large Object). (DB2 from IBM, SQL from SYBASE, Informix, Interbase)
2. Extend an existing database language with object-oriented capabilities. (IRIS, O2 and VBASE/ONTOS extended SQL)
3. Extend existing object-oriented programming language with database capabilities (GemStone OPAL extended SmallTalk)
4. Extendable object-oriented DBMS library (ONTOS)
IRIS has Object SQL. Each entity type specifies one or more properties. Properties are functions that apply to the instances of the type. Entity types have extensions and can inherit from one another.
Example: The type PERSON can be created by:
The user can compose the function application:
P5(P4(...P1(P))...)
in the select statement.
EXAMPLE:
Employee is a subtype of Person
SalesPerson is a subtype of Employee
Addresses have street names
Salespeople have sales managers
sales managers have secretaries
secretaries are employees
Retrieve the street name of the address of the secretary of the manager of each salesperson whose salary is more than 50,000:
SQL is the most popular relational
query language
SQL is also the only relational language
that has a standard.
SQL is being promoted by many
companies as the interface language
for database engines and database
servers. New applications developed
in SQL extensions can easily call
these servers for remote access.
The object-oriented paradigm emphasizes modularity and re-usability. The goal of an object-oriented approach is to satisfy the "open closed principle".
Object-oriented modelling typically divides into two aspects of work: the modelling of dynamic behaviours like business processes and use cases, and the modelling of static structures like classes and components. OOA and OOD are the two distinct abstract levels (i.e. the analysis level and the design level) during OOM. The Unified Modelling Language (UML) and SysML are the two popular international standard languages used for object-oriented modelling.
Personal note: So for me Object Oriented is a way to look at the world. This view on the word is particularly handy when you want to construct or work with man made systems that have a lot of components working interdependently and where the requirements are likely to change in the foreseeable future. So good for Information systems development,but for designein an constructing houses other paradigms are more helpful.
Personal note 2: There is often confusion about what to model. In fact we often need two models. A model of how we look at reality (like A person is a client and when he steps into the train he is a passenger ) The we also need to model the system which maintains data about the real world. sometimes real world modelling is done with different paradigms (f.e. Entity - Relation Ship Modelling) than systems modeling.
Peronal Note: from a philosofical point of view there is no structure, since everything changes over time. So in order to decide what is structural an what is behavioural in our system, we need a purpose of the system, a time frame and a judgement about what might change and what remains. This is the world of Analysing and Design.
Visualizing objects and their interdependence (UML)
To visualize how the the components interact The Unified Modelling Language was developed.
UML 2 has many types of diagrams which are divided into two categories.[3] Some types represent structural information, and the rest represent general types of behaviour, including a few that represent different aspects of interactions. These diagrams can be categorized hierarchically as shown in the following class diagram:
- Structure diagrams emphasize the things that must be present in the system being modelled.
- Behaviour diagrams emphasize what must happen in the system being modelled.
OBJECT-ORIENTED DATABASE (OODB)
abstract data types
inheritance
object identity
persistence
support of transactions
simple querying of bulk data
concurrent access
resilience
security
WHY OBJECT-ORIENTED DATABASE?
Integration and Sharing
Multiple applications, products, or objects share common sub-objects.
(Hypermedia links are then used to navigate from one object to another)
Object-oriented databases allows referential sharing through the support of object identity and inheritance.
Fundamentals of Object-Oriented Approach
The object-oriented paradigm is illustrated below:Objects and Identity
The following figure shows object with state and behavior. The state is represented by the values of the object's attributes, and the behavior is defined by the methods acting on the state of the object. There is a unique object identifier OID to identify the object.Complex Objects
Complex objects are built by applying constructors to simpler objects including: sets, lists and tuples. An example is illustrated below:Encapsulation
Encapsulation is derived from the notion of Abstract Data Type (ADT). It is motivated by the need to make a clear distinction between the specification and the implementation of an operation. It reinforces modularity and provides a form of logical data independence.Class
A class object is an object which acts as a template. It specifies:A structure that is the set of attributes of the instances
A set of operations
A set of methods which implement the operations
Instantiation means generating objects, Ex. 'new' operation in C++
Persistence of objects: Two approaches
An implicit characteristic of all objects
An orthogonal characteristic - insert the object into a persistent collection of objects
Inheritance
A mechanism of reusability, the most powerful concept of OO programmingAssociation
Association is a link between entities in an application In OODB, associations are represented by means of references between objectsa representation of a binary association
a representation of a ternary association
reverse reference
ADVANTAGES OF OODB
1. The semantic gap: The real world and the Conceptual model is very similar.
2. Impedance mismatch: Programming languages and database systems must be interfaced to solve application problems. But the language style, data structures, of a programming language (such as C) and the DBMS (such as Oracle) are different. The OODB supports general purpose programming in the OODB framework.
3. New application requirements: Especially in OA, CAD, CAM, CASE, object-orientation is the most natural and most convenient.
COMPLEX OBJECT DATA MODELS
Complex object data model is non-1NF data model. It allows the following extensions:1. Sets of atomic values
2. Tuple-valued attributes
3. Sets of tuples (nested relations)
4. General set and tuple constructors
5. Object identity
Formal definition:
1. Every atomic value in A is an object.
2. If a1, ..., an are attribute names in N, and O1, ..., On are objects, then T = [a1:O1, ..., an:On] is also an object, and T.ai retrieves the value Oi.
3. If O1, ..., On are objects, then S = {O1, ..., On} is an abject.
Example: {[Name:John, Age: 30],
[Name:Mary, Friends:{Mark, Vicki}]}
An object is defined by a triple (OID, type constructor, state) where OID is the unique object identifier, type constructor is its type (such as atom, tuple, set, list, array, bag, etc.) and state is its actual value.
Example:(i1, atom, 'John')
(i2, atom, 30)
(i3, atom, 'Mary')
(i4, atom, 'Mark')
(i5, atom 'Vicki')
(i6, tuple, [Name:i1, Age:i3])
(i7, set, {i4, i5})
(i8, tuple, [Name:i3, Friends:i7])
(i9, set, {i6, i8})
Semantic Data Models
The following figure shows different types of nodes in GSM.The different types of links (relationships) in GSM are shown below.
A semantic model for the sales office automation example is shown below.
An entity-relationship model for the sales office automation example is shown below.
OBJECT-ORIENTED DATABASES
OODB = Object Orientation + Database Capabilities
FEATURES TO BE CONSIDERED:persistence
support of transactions
simple querying of bulk data
concurrency control
resilience and recovery
security
versioning
integrity
performance issues
DATA MODELS TO BE CONSIDERED:
Complex object model
Semantic data model such as Extended ER (EER) model, OPM model
NOT ALL OODB SUPPORTS SAME OBJECT-ORIENTATION, SAME DATA MODEL AND SAME SET OF FEATURES
RESEARCH PROTOTYPES
COMMERCIAL OODB
COMMERCIAL OODB (continued)
1. User-defined functions (dBase).
2. User-defined ADTs (POSTGRES)
3. Very-long multimedia fields (BLOB or Binary Large Object). (DB2 from IBM, SQL from SYBASE, Informix, Interbase)
ALTERNATIVE OODB STRATEGIES
1. Develop novel database data model or data language (SIM)2. Extend an existing database language with object-oriented capabilities. (IRIS, O2 and VBASE/ONTOS extended SQL)
3. Extend existing object-oriented programming language with database capabilities (GemStone OPAL extended SmallTalk)
4. Extendable object-oriented DBMS library (ONTOS)
OODB QUERY LANGUAGE
ONTOS (from Ontologic), O2 (from O2 Technology) and IRIS (from HP) all offer object-oriented extension of SQL.IRIS has Object SQL. Each entity type specifies one or more properties. Properties are functions that apply to the instances of the type. Entity types have extensions and can inherit from one another.
Example: The type PERSON can be created by:
Create Type Person ( Name char(20), Age integer Address address)where address is another type. In IRIS, Name, Age and Address are called properties (functions) and apply to instances of type Person.
OODB QUERY LANGUAGE (continued)
Object SQL Query: retrieve the name and state of all people who are older than 21:Select Name(p), State(Address(p) for each Person p where Age(p) > 21(Here we assume address has another property called "state")
The user can compose the function application:
P5(P4(...P1(P))...)
in the select statement.
EXAMPLE:
Employee is a subtype of Person
SalesPerson is a subtype of Employee
Addresses have street names
Salespeople have sales managers
sales managers have secretaries
secretaries are employees
Retrieve the street name of the address of the secretary of the manager of each salesperson whose salary is more than 50,000:
Select StreetName(Address(Secretary(Manager(0)))) for each SalesPerson p where Salary(p) > $50,000
WHY EXTENDING SQL?
Modelleren van de zoekruimte
Bij het ontwerpen van een zoekalgoritme van belang eerst goed te kijken
welk alfabet en grammaticas je gebruikt. Die bepalen namelijk je
zoekruimte en of en hoe efficiënt je een oplossing kunt vinden.
Veel voorkomende zoekruimte zijn:
Op onderstaande website worden enekele beroemde algoritmes getoond in een zoekruimte in de vorm van een boom
http://www.stefanbruins.nl/portfolio/projects/search-algorithm-visualizations-project/visualizations/intro.htm
De zoekalgoritmen zijn:
http://www.algomation.com/player?algorithm=545ec29d01f03a02007b101d
Veel voorkomende zoekruimte zijn:
- De zoekruimte is een lijststructuur (presedence contraints, knoop_ids volgens alfebat + 'volgt_op' en een grammaticaregel die tussen knopen volgt_op plaatst.)
- De zoek ruimte is een boomstructuur (grammaticatica is uitgebreider)
- De zoek ruimte is een graafstructuur
- De zoekruimte is een tabellenstructuur. (grammatica betreft integriteisregels)
- De zoekruimte betreft natuurlijke getallen met een grammatica in de vorm van rekenkundige regels als grammaticale constraints. CSP
- De zoekruimte betreft uitspraken en logische operatoren als grammatica (logica)
Op onderstaande website worden enekele beroemde algoritmes getoond in een zoekruimte in de vorm van een boom
http://www.stefanbruins.nl/portfolio/projects/search-algorithm-visualizations-project/visualizations/intro.htm
De zoekalgoritmen zijn:
- Breath First Search
- Depth First Search
- Iterative Deepening
- Hill-climbing
- Beam serch
- A algoritme
- A* Algoritme
- Minimax
http://www.algomation.com/player?algorithm=545ec29d01f03a02007b101d
zondag 22 oktober 2017
Zoeken naar oplossingen
AI wordt ingezet om problemen op te lossen. Een groot onderdeel van AI richt zich dan ook op algoritmes die gebruikt worden om systemtisch de wereld om hun heen te onderzoeken naar mogelijkheden om dichter bij een oplossing te komen.
Er zijn talloze manieren van zoeken, de een is beter dan de ander. Daarbij spelen drie aspecten een rol:
- Als je zoekalgoritme uitvoert, hoe zeker is het dat je een oplossing vindt?
- Hoe snel wordt de oplossing gevonden?
- Hoeveel kost het om de oplossing te vinden (hoeveel resources)
Computer zijn machines die symbolen bewaren en bewerken. Zoekalgoritmes in computers hebben dus één ding met elkaar gemeen ze zoeken een specifike combinatie van symbolen die we 'de oplossing' noemen.
De combinaties van alle mogelijke symbolen noem ik maar even 'totale zoekomgeving' Overigens zijn er altijd regels die nog voorafgaand aan het zoekalgoritme het aantal symbolen en combinaties ervan beperken.
We hebben het over een alfabet wanneer we het over een opsomming van de verschillende symbolen die gebruikt en gecombineerd mogen worden en over een grammatica wanneer we het hebben over regels die beperkingen opleggen aan mogelijke combinaties van symbolen.
Let op. Ik heb het hier niet alleen over teksten, maar ook over bijvoorbeeld verkeersborden. Ook hier is een alfabet van te maken. Welke vormen gebruikt mogen worden en een grammatica die aangeeft welke combinaties van vormen kunnen.
De combinaties die mogelijk zijn op basis van het alfabet en een grammatica is de zoekruimte waarbinnen een oplossing moet worden gevonden.
wanneer we dus in AI over oplossingen spreken hebben we twee beteknissen. Oplossing in de zin van de gevonden combinatie van symbolen. Deze combinatie van symbolen wordt vervolgens op één of andere manier gebruikt wordt in in de werkelijke wereld iets te veranderen. Deze verandering, dit effect wordt ook vak als oplossing aangeduidt.
Er zijn talloze manieren van zoeken, de een is beter dan de ander. Daarbij spelen drie aspecten een rol:
- Als je zoekalgoritme uitvoert, hoe zeker is het dat je een oplossing vindt?
- Hoe snel wordt de oplossing gevonden?
- Hoeveel kost het om de oplossing te vinden (hoeveel resources)
Computer zijn machines die symbolen bewaren en bewerken. Zoekalgoritmes in computers hebben dus één ding met elkaar gemeen ze zoeken een specifike combinatie van symbolen die we 'de oplossing' noemen.
De combinaties van alle mogelijke symbolen noem ik maar even 'totale zoekomgeving' Overigens zijn er altijd regels die nog voorafgaand aan het zoekalgoritme het aantal symbolen en combinaties ervan beperken.
We hebben het over een alfabet wanneer we het over een opsomming van de verschillende symbolen die gebruikt en gecombineerd mogen worden en over een grammatica wanneer we het hebben over regels die beperkingen opleggen aan mogelijke combinaties van symbolen.
Let op. Ik heb het hier niet alleen over teksten, maar ook over bijvoorbeeld verkeersborden. Ook hier is een alfabet van te maken. Welke vormen gebruikt mogen worden en een grammatica die aangeeft welke combinaties van vormen kunnen.
De combinaties die mogelijk zijn op basis van het alfabet en een grammatica is de zoekruimte waarbinnen een oplossing moet worden gevonden.
wanneer we dus in AI over oplossingen spreken hebben we twee beteknissen. Oplossing in de zin van de gevonden combinatie van symbolen. Deze combinatie van symbolen wordt vervolgens op één of andere manier gebruikt wordt in in de werkelijke wereld iets te veranderen. Deze verandering, dit effect wordt ook vak als oplossing aangeduidt.
Boter Kaas en Eieren (een tussenstap)
Het maken van een programma dat een op een beetje intelligente manier vier op een rij kan spelen, is mij tegengevallen. Een stuk complexer dan ik aanvankelijk aannam.Ik had bedacht dat ik het 4 op een rij programma in onderstaande stappen kon maken, maar de overgang tussen stap 2 en 3 was te groot.
Stap 1. Vier op een rij met twee menselijke spelers. Dit lijkt mij de meest eenvoudige versie om te maken
Stap 2. Vier op een rij waarbij de gebruiker tegen een (zeer simpele) AI-agent speelt. De AI-agent weet enkel wat geldige zetten zijn (kies een kolom tussen 0 en 7 en die niet vol is).
Stap 3. Vier op een rij waarbij de gebruiker tegen een iets intelligentere agent speel. Deze agent kent ook de geldige zetten, maar kijkt ook naar de stand van het bord om zijn keuze te maken.
Stap 4. De agent kijkt niet alleen naar geldige stappen en maakt een inschatting wat de beste volgende stap. Deze agent houdt bij zijn inschatting ook rekening met 2 of meer toekomstige stappen van hem en zijn tegenstander.
Daarom ben ik teruggevallen op Boter Kaas en Eieren. De regels van dit spel zijn eenvoudiger en dat maakte dat het wel lukte om alle vier de stappen te nemen. Zie de broncode hier.
De grenzen van deze programmeur
Om een AI programma te maken voor een spel als Vier op Rij heb, je verschillede soorten kennis nodig:
- kennis van computers en de programmeertaal
- kennis van algoritmen die zoeken en redeneren en met onzekerheid om kunnen gaan
- kennis van de omgeving / het domein waar de agent komt te functioneren
Overpeinzingen van de programmeur
Ik merk dat ik geduld kan opbrengen om kennis op te doen ten aanzien van de eerste twee punten, het precies uitspitten van de mogelijke situaties die bij Vier op Rij spelen, heb ik veel minder geduld.
Concreet in stap 3 moet de agent de opstelling van het bord analyseren om tot een goede inschatting te komen van de beste beslissing. Het bedenken en implementeren van een dergelijk algoritme dat voldoende intelligent is, vind ik een behoorlijk lastige klus en ik het kan mij niet genoeg boeien omdat het zo'n specifiek probleem gaat.
Ik heb wel een poging gewaagd. Zie hier.
Stap 1. Vier op een rij met twee menselijke spelers. Dit lijkt mij de meest eenvoudige versie om te maken
Stap 2. Vier op een rij waarbij de gebruiker tegen een (zeer simpele) AI-agent speelt. De AI-agent weet enkel wat geldige zetten zijn (kies een kolom tussen 0 en 7 en die niet vol is).
Stap 3. Vier op een rij waarbij de gebruiker tegen een iets intelligentere agent speel. Deze agent kent ook de geldige zetten, maar kijkt ook naar de stand van het bord om zijn keuze te maken.
Stap 4. De agent kijkt niet alleen naar geldige stappen en maakt een inschatting wat de beste volgende stap. Deze agent houdt bij zijn inschatting ook rekening met 2 of meer toekomstige stappen van hem en zijn tegenstander.
Daarom ben ik teruggevallen op Boter Kaas en Eieren. De regels van dit spel zijn eenvoudiger en dat maakte dat het wel lukte om alle vier de stappen te nemen. Zie de broncode hier.
De grenzen van deze programmeur
Om een AI programma te maken voor een spel als Vier op Rij heb, je verschillede soorten kennis nodig:
- kennis van computers en de programmeertaal
- kennis van algoritmen die zoeken en redeneren en met onzekerheid om kunnen gaan
- kennis van de omgeving / het domein waar de agent komt te functioneren
Overpeinzingen van de programmeur
Ik merk dat ik geduld kan opbrengen om kennis op te doen ten aanzien van de eerste twee punten, het precies uitspitten van de mogelijke situaties die bij Vier op Rij spelen, heb ik veel minder geduld.
Concreet in stap 3 moet de agent de opstelling van het bord analyseren om tot een goede inschatting te komen van de beste beslissing. Het bedenken en implementeren van een dergelijk algoritme dat voldoende intelligent is, vind ik een behoorlijk lastige klus en ik het kan mij niet genoeg boeien omdat het zo'n specifiek probleem gaat.
Ik heb wel een poging gewaagd. Zie hier.
vrijdag 21 april 2017
4 op een rij (met zeer eenvoudige agent)
In een voorgaande blog heb ik al aangegeven dat een AI-agent een combinatie van algoritmen is dat er voor zorgt dat
de best mogelijk beslissing wordt genomen gegeven bepaalde onzekerheid
in de omgeving waarin de agent acteert.
Vervolgens wou ik in vier stappen een AI agent maken die een waardig tegenstander van een menselijke speler zou worden.
Stap 1. 4 op een rij met twee menselijke spelers.
Stap 2. 4 op een rij waarbij de gebruiker tegen een (zeer simpele) AI-agent speelt. De AI-agent weet enkel wat geldige zetten zijn (kies een kolom tussen 0 en 7 en die niet vol is). Als keuze voor de kolom gebruikt ie een randomize-functie.
Stap 3. Deze agent kent de geldige zetten, maar kijkt ook naar de stand van het bord om zijn keuze te maken.
Stap 4. De agent kijkt niet alleen naar geldige stappen en maakt een inschatting wat de beste volgende stap. Deze agent houdt bij zijn inschatting ook rekening met 2 of meer toekomstige stappen van hem en zijn tegenstander.
In deze versie van 4 op een rij speel je als gebruiker tegen een zeer eenvoudige agent. Eigenlijk kiest de agent alleen maar een willekeurige kolom voor zijn zet. Hij is nog net wel zo intelligent dat ie weet dat alleen geldige zetten zijn toegestaan. M.a.w. zetten tussen 0 en 7 (aantal kolommen in het bord) en dat de kolom niet vol mag zijn.
Bord.java beschrijft het bord en de belangrijkste spelregels.
spel.java handelt de interactie tussen speler (gebruiker) en agent af.
Vervolgens wou ik in vier stappen een AI agent maken die een waardig tegenstander van een menselijke speler zou worden.
Stap 1. 4 op een rij met twee menselijke spelers.
Stap 2. 4 op een rij waarbij de gebruiker tegen een (zeer simpele) AI-agent speelt. De AI-agent weet enkel wat geldige zetten zijn (kies een kolom tussen 0 en 7 en die niet vol is). Als keuze voor de kolom gebruikt ie een randomize-functie.
Stap 3. Deze agent kent de geldige zetten, maar kijkt ook naar de stand van het bord om zijn keuze te maken.
Stap 4. De agent kijkt niet alleen naar geldige stappen en maakt een inschatting wat de beste volgende stap. Deze agent houdt bij zijn inschatting ook rekening met 2 of meer toekomstige stappen van hem en zijn tegenstander.
In deze versie van 4 op een rij speel je als gebruiker tegen een zeer eenvoudige agent. Eigenlijk kiest de agent alleen maar een willekeurige kolom voor zijn zet. Hij is nog net wel zo intelligent dat ie weet dat alleen geldige zetten zijn toegestaan. M.a.w. zetten tussen 0 en 7 (aantal kolommen in het bord) en dat de kolom niet vol mag zijn.
Bord.java beschrijft het bord en de belangrijkste spelregels.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | package javaapplication10; import java.util.Scanner; /** * * @author gerard */ class Board{ byte[][] board = new byte[6][7]; public Board(){ board = new byte[][]{ {0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,}, {0,0,0,0,0,0,0,}, }; } public void undoMove(int column){ for(int i=0;i<=5;++i){ if(board[i][column] != 0) { board[i][column] = 0; break; } } } } public class Bord { private Board b; private Scanner scan; private int nextMoveLocation=-1; private int maxDepth = 9; private static final char[] symbolen = new char[] { 'X', 'O','.' }; private final char[][] velden; private int breedte; private int hoogte; private int gekozenKolom = -1; // laatst gekozen kolom private int grensRij = -1;// hoogste rij (grensrij)bij deze kolom public Bord(int pbreedte, int phoogte) { this.velden = new char[phoogte][pbreedte]; for (int rij = 0; rij < this.velden.length; rij++) { for (int kolom = 0; kolom < this.velden[rij].length; kolom++) { this.velden[rij][kolom] = symbolen[2]; } } breedte = this.velden[0].length; hoogte = this.velden.length; } public String toString() { String BordBeeld = ""; for (int rij = 0; rij < this.hoogte; rij++) { for (int kolom = 0; kolom < this.breedte; kolom++) { BordBeeld = BordBeeld + this.velden[rij][kolom]; } BordBeeld = BordBeeld + "\n"; } return BordBeeld; } public boolean isLegaleZet(int pkolom){ boolean result = true; if ( !(0 <= pkolom && pkolom < breedte)) { System.out.println("Kolom moeten tussen 0 and " + (this.hoogte - 1) + " zijn"); result = false; } return result; } public boolean KolomIsVol(int pkolom) { boolean result = true; int hoogte = 0;// this.velden.length - 1; if (this.velden[hoogte][pkolom] != symbolen[2]) { System.out.println("Deze Kolom is vol."); result = false; } return result; } public boolean BordIsVol() { boolean result = true; int aantalVolleKol = 0; for (int kol = 0;kol <= this.breedte -1; kol++) { if (KolomIsVol(kol)) { aantalVolleKol++; } } if (aantalVolleKol < this.breedte) { result = false; } return result; } //Placing a Move on the board public void DoeZet(int column, int player){ for (int h = this.hoogte -1; h>=0; h--) { if (this.velden[h][column] == '.') {// er is nog ruimte this.gekozenKolom = column; this.grensRij = h; this.velden[this.grensRij][this.gekozenKolom] = symbolen[player]; break; } } } public boolean WinnendeZet() { char sym = this.velden[this.grensRij][this.gekozenKolom]; String reeks = String.format("%c%c%c%c", sym, sym, sym, sym); return bevat(this.horizontaal(), reeks) || bevat(this.vertikaal(), reeks) || bevat(this.slashDiagonaal(), reeks) || bevat(this.backslashDiagonaal(), reeks); } /** * zit er een winnende reeks in de horizontale rij */ private String horizontaal() { return new String(this.velden[this.grensRij]); } /** * zit er een winende reeks en ide verticale rij */ private String vertikaal() { StringBuilder sb = new StringBuilder(this.hoogte); for (int h = 0; h < this.hoogte; h++) { sb.append(this.velden[h][this.gekozenKolom]); } return sb.toString(); } /** * * */ private String slashDiagonaal() { StringBuilder sb = new StringBuilder(this.hoogte); for (int h = 0; h < this.hoogte; h++) { int w = this.gekozenKolom + this.grensRij - h; if (0 <= w && w < this.breedte) { sb.append(this.velden[h][w]); } } return sb.toString(); } /** * */ private String backslashDiagonaal() { StringBuilder sb = new StringBuilder(this.hoogte); for (int h = 0; h < this.hoogte; h++) { int w = this.gekozenKolom - this.grensRij + h; if (0 <= w && w < this.breedte) { sb.append(this.velden[h][w]); } } return sb.toString(); } private boolean bevat(String hooiberg, String naald) { return hooiberg.contains(naald); } } |
spel.java handelt de interactie tussen speler (gebruiker) en agent af.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | package javaapplication10; import java.util.Random; import java.util.Scanner; /** * * @author gerard */ public class Spel { Bord b = new Bord(7,8); int zet; public int GebruikerKiestZet(){ System.out.println("Your move (0-6): "); Scanner scan = new Scanner(System.in); int g_zet = scan.nextInt(); while (!b.isLegaleZet(g_zet) || !b.KolomIsVol(g_zet)){ g_zet = scan.nextInt(); } return g_zet; } public int AgentKiestZet() { int max = 7; // dit moet nog geparametiseerd worden int min =0; Random random = new Random(); int l_zet = random.nextInt(max - min + 1) + min; while (!b.isLegaleZet(l_zet) || !b.KolomIsVol(l_zet)){ l_zet = random.nextInt(max - min + 1) + min; } return l_zet; } public int speel() { System.out.println(b); // remise moet nog worden ingebouwd. while(true){ zet = GebruikerKiestZet(); b.DoeZet(zet, 0); System.out.println(b); if (b.WinnendeZet()) {System.out.println("You Win!");break;} zet = AgentKiestZet(); b.DoeZet(zet, 1); System.out.println(b); if (b.WinnendeZet()) {System.out.println("Agent wins!");break;} } return 1; } /** * @param args the command line arguments */ public static void main(String[] args) { Spel spel = new Spel(); spel.speel(); // ingebouwd moe tworden wie begint agent of gebruiker // Scanner scan = new Scanner(System.in); // System.out.println("Would you like to play first? (yes/no) "); //String answer = scan.next().trim(); // if(answer.equalsIgnoreCase("yes")) GebruikerKiestZet(); // b.displayBoard(); // b.placeMove(3, 1); // b.displayBoard(); } } |
woensdag 12 april 2017
Eerste Orde logica
Introductie
Eerste orde logica is een uitbreiding van de predicaten logica. Je kunt er meer soorten zinnen in kwijt.
Bij propsitionele logica spreken we over relaties tussen proposities (uitspraken die in hun geheel waar of onwaar zijn), we spreken over de relaties tussen de verschillende relaties tussen de proposities en we hebben diverse mechanismen om logische conclusies te trekken op basis van die relaties tussen proposities.
Bijvoorbeeld:
zin p: Jack kent Jille
zin q: Jill kent Jack
premisse: Jack kent Jill (p)
premisse: als Jack kent Jill dan Jill kent Jack(p -> q)
Implication elimation: Jill kent Jack (q)
Stel nu dat we meer generieke uitspraken willen doen over de wereld. Bijvoorbeeld: "Als een persoon, een ander persoon kent dan kent de tweede persoon de eerste ook" en we weten dat Jack, Jill kent.
Eerste orde Logica is een uitbreding van predicaten logica om dit soort zinnen uit te drukken in een formele taal en op basis daarvan logsche conclusies te maken.
Syntax
In Relational Logic, there are no propositional constants; instead we have object constants, relation constants(predicate), and variables en Functies.
Let op functies en relaties lijken wat vorm erg op elkaar p(a,a) en q(a,b), maar een relatie geeft waar of niet waar en een functes geeft op basis van de parameters een objectconstante terug.
There are three types of sentences in Relational Logic, viz. relational sentences (the analog of propositions in Propositional Logic), logical sentences (analogous to the logical sentences in Propositional Logic), and quantified sentences
Negation: | (¬p(a)) | |
Conjunction: | (p(a) ∧ q(b, c)) | |
Disjunction: | (p(a) ∨ q(b, c)) | |
Implication: | (p(a) ⇒ q(b, c)) | |
Biconditional: | (p(a) ⇔ q(b, c)) |
A universally quantified sentence is used to assert that all objects have a certain property.
(∀x.(p(x) ⇒ q(x,x)))
An existentially quantified sentence is used to assert that some object has a certain property.
(∃x.(p(x) ∧ q(x,x)))
Note that quantified sentences can be nested within other sentences.
∀x.p(x) ⇒ q(x) en ∀x.(p(x) ⇒ q(x)) zijn verschillend
Precedence: In Relational Logic, the precedence relations of the logical operators are the same as in Propositional Logic, and quantifiers have higher precedence than logical operators.
Eigenschappen van gekwantificeerde zinnnen:(hebben we strtaks nodig bij vaststellen demantiek)
An expression in Relational Logic is ground if and only if it contains no variables. For example, the sentence p(a) is ground, whereas the sentence ∀x.p(x) is not.
An occurrence of a variable is free if and only if it is not in the scope of a quantifier of that variable
For example, y is free and x is bound in the following sentence.
A sentence is open if and only if it has free variables.
Semantiek
The Herbrand base for a vocabulary is the set of all ground relational sentences that can be formed from the constants of the language. Said another way, it is the set of all sentences of the form r(t1,...,tn), where r is an n-ary relation constant and t1, ... , tn are object constants.
For a vocabulary with object constants a and b and relation constants p and q where p has arity 1 and q has arity 2, the Herbrand base is shown below.
A truth assignment for a Relational Logic language is a function that maps each ground relational sentence in the Herbrand base to a truth value.
p(a) | → | 1 |
p(b) | → | 0 |
q(a,a) | → | 1 |
q(a,b) | → | 0 |
q(b,a) | → | 1 |
q(b,b) | → | 0 |
Wanneer de Herbrand-base is vastgesteld kun je complexere zinnen maken met de logische connectoren. Net las bij Propositielogica:
Alleen waar P en Q staat, kun je vervangen door p(a) en p(b)
omgaan met kwantifiers
A universally quantified sentence is true for a truth assignment if and only if every instance of the scope of the quantified sentence is true for that assignment.
An existentially quantified sentence is true for a truth assignment if and only if some instance of the scope of the quantified sentence is true for that assignment.
satisfies a sentence with free variables if and only if it satisfies every instance of that sentence. A truth assignment satisfies a set of sentences if and only if it satisfies every sentence in the set.
omgaan met functies
For a vocabulary with a single object constant a and a single unary function constant f and a single unary relation constant r, the Herbrand base consists of the sentences shown below.
hum: probleem oneindige bas -> hoe gaan we waarheidstabel maken?
Luckily, things are not always so bad. In some cases, only finitely many elements of the Herbrand base are true. In such cases, we can describe a truth assignment in finite space by writing
Werken met één zin (die kwantifiers heeft)
EvaluatieGegeven eerdere interpratatie van de Herbrand-baswat is de volgende zin true of vals
∀x.(p(x) ⇒ q(x,x))
p(a) ⇒ q(a,a)
p(b) ⇒ q(b,b)
p(a) ⇒ q(a,a)) | → | 1 |
(p(b) ⇒ q(b,b)) | → | 1 |
allebei 1 dus
∀x.(p(x) ⇒ q(x,x)) → 1
Bij een existentiele zin minimaal 1 instantie waar, maakt de hele zin waar.
Satisfactie
p(a)
p(b) | q(a) | q(b) | p(a) ∨ p(b) | ∀x.(p(x) ⇒ q(x)) | ∃x.q(x) | |
---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 1 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 1 | 1 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | 1 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 0 | 1 | 1 |
0 | 0 | 0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 1 | 0 |
omgaan met functies:
The good news is that, even though evaluation and satisfaction are not directly computable, there are effective procedures for indirectly determining validity, contingency, unsatisfiability, logical entailment, and so forth that work in many cases even when our usual direct methods fail.
Werken met 2 of meer zinnen (entailment)
nader uit te werken
Abonneren op:
Posts (Atom)