Programmazione di modelli cognitivi vs Programmazione imperativa vs Programmazione dichiarativa

3

Sto leggendo questo articolo di John Funge su Cognitive Modeling per Computer Games: link
E qualche ulteriore approfondimento su questo argomento in questo URL:
link

Ho difficoltà a comprendere la CML: Capisco che sia una specie di mix tra programmazione Imperativa e Dichiarazione, non ho capito come:

Ad esempio il seguente pseudo-codice in Programmazione Imperativa:

Declare a new List called ExpensiveItemsNames;
Foreach Item in Items:
If ItemPrice > 100 then
Add ItemName to ExpensiveItemsNames

rispetto alla versione declinativa: (usando SQL)

SELECT ItemName FROM Items
WHERE ItemPrice > 100

Quale sarebbe la versione CML di esso?
E in che modo CML aiuta il programmatore? Non ho capito anche questo.

Inoltre, nel più dettagliato sito web (come accennato prima - che significa il secondo link che ho inserito) si parla anche di potatura per ridurre la complessità dello spazio.
Mentre so cosa è la potatura, non riesco a capire che sia una relazione con la CML. Sembrano due cose non correlate per me al momento.
E anche per quanto riguarda la potatura - nell'articolo originale non è menzionata, ma in "ulteriori dettagli" il sito menziona in seguito una fase di pre-elaborazione - Non ho capito se è correlata alla LMC o meno.

Ok, capisco che la mia affermazione iniziale che la CML "è una sorta di mix tra programmazione imperativa e dichiarativa" non è vera (sebbene sia scritta nell'articolo: "... ma la distinzione le funzionalità di CML sono la conoscenza del dominio in modo intuitivo può essere specificato e come è familiare a uno sviluppatore di giochi strutture di controllo per focalizzare la potenza del motore di ragionamento. Questo costituisce un'importante via di mezzo tra regolari programmazione logica (come rappresentato da Prolog) e tradizionale programmazione imperativa (come indicato da C) "

Per quanto ho capito, la CML dovrebbe rispondere a questi problemi:
1. " se lo siamo non molto attento a come rappresentiamo il personaggio conoscenza possiamo privarli del "senso comune" come ragionano sugli effetti delle loro azioni . Qual è il significato di "attenzione extra" e in che modo influisce sul "senso comune" del personaggio? E come aiuta CML?

2 . "come fornire un comodo meccanismo per consentire al programmatore di colpire un equilibrio tra un sacco di veloce comportamento pre-programmato e più costoso processo decisionale in fase di esecuzione ".
Ho le mie supposizioni su questo, ma non sono convinto che siano vere:
 Se usiamo solo il carattere pre-programmato , la complessità può essere anche molto difficile da programmare e anche molto complessa in termini di memoria e tempo di esecuzione di pre-elaborazione.
 Tuttavia, se usiamo solo il processo decisionale in fase di esecuzione , il personaggio sarà molto "stupido" o dovrà iniziare a calcolare molto ogni passaggio.
CML fornisce qualcosa in mezzo, sotto forma di "motore di ragionamento", che riempie i dettagli durante l'esecuzione.
Non ho capito però come la CML fa questo.
 L'articolo cita calcoli di tanto in tanto: " In questo modo un personaggio può prevederlo dopo un certo periodo di tempo, o evento, sarà ignorante di alcuni aspetto del suo mondo, e può pianificare di percepire e riprogettare. Ma non sono sicuro di aver capito correttamente.
Il collegamento "ulteriormente dettagliato" menziona la potatura , sebbene l'articolo non lo faccia. Forse questo è una parte necessaria di CML?
3. " utilizzando l'intervallo aritmetico per integrare il sensing nel nostro quadro teorico sottostante, abilitiamo personaggi per generare piani d'azione anche quando si trovano in un virtuale estremamente complesso e dinamico mondi .
Penso che il significato di " interval " qui sia lo spazio di ciò che il personaggio conosce e non gli intervalli di tempo menzionati prima. Questa è anche una parte necessaria di CML?

Quindi queste sono alcune altre domande sarei felice di capire meglio se qualcuno lo sa.

    
posta achie 21.12.2014 - 20:26
fonte

2 risposte

2

(Disclaimer: non so nulla su CML, intelligenza artificiale, software di simulazione, agenti software autonomi o qualsiasi argomento discusso qui in questa domanda.La mia risposta è basata solo sulla mia conoscenza limitata e sui link che hai fornito .)

Risposta breve: i termini che hai menzionato appartengono a diverse categorie o livelli di astrazione, quindi è difficile fare confronti, analogie o esempi.

Come dice @Brendan, Imperative and Declarative sono paradigmi di programmazione (codifica).

In base ai collegamenti forniti, la Programmazione della modellazione cognitiva sembra essere la più simile a Programmazione logica o Programmazione basata sugli eventi , utilizzata nel contesto delle simulazioni software di agenti autonomi.

All'interno di una simulazione software di agenti autonomi, c'è:

  • Un mondo, insieme a tutta la sua meccanica fisica e deterministica
  • Uno o più agenti, ognuno dei quali separatamente:
    • Riceve stimoli (sensi, input) dal mondo
    • Esegue la propria logica
    • Utilizzare l'uscita della propria logica per controllare i propri attuatori (motori)
  • In alcuni tipi di simulazioni, è consentita la comunicazione diretta tra due agenti. Ciò aggiunge una modalità aggiuntiva di input (ricezione di messaggi) e output (invio di messaggi) a ciascun agente.
  • Dopo aver completato una singola fase temporale, quando tutte le decisioni sono state prese e tutti gli effetti fisici sono stati applicati, il software di simulazione fa avanzare la fase temporale e ripete di nuovo tutto il processo decisionale e gli effetti fisici.
    • Gli agenti sono autorizzati a portare avanti la loro memoria, per riutilizzarli in fasi temporali future.
  • In alcune simulazioni più realistiche e avanzate,
    • Gli agenti possono avere un comportamento di ragionamento. Ciò richiede che ogni agente faccia uso di un motore induttivo.
    • Gli agenti possono utilizzare sistemi statistici, di riconoscimento di pattern o di apprendimento automatico per prendere decisioni e migliorare il modello nel tempo.

La ragione per cui dico "simulazione software di agenti" appartiene a "un tipo di applicazione software" al contrario di un paradigma perché non viene detto nulla su come gli agenti fanno la propria logica . In effetti, molti paradigmi di programmazione differenti sono stati messi in uso nell'implementazione della logica di questi agenti. Ho già menzionato alcune possibilità sopra; ci sono molti più paradigmi usati nella pratica.

La programmazione di modelli cognitivi nei collegamenti che hai fornito sembra essere un'implementazione di un linguaggio specifico del dominio, come dice @Brendan.

È qualificato come linguaggio di programmazione?

Se hai ottenuto:

  1. Una sintassi e una grammatica per questo linguaggio di programmazione,
  2. Un'implementazione software che puoi eseguire su un computer per verificare ciò che hai letto su questo linguaggio di programmazione,

Allora sì, è un linguaggio di programmazione per il tuo scopo . Altrimenti, è semplicemente un linguaggio di programmazione di cui hai letto, ma non ti sei ancora verificato da solo .

Dirò questo come un pragmatico. In pratica, non dovresti trattarlo come se fosse una vera lingua, a meno che tu non sia un mondo accademico, nel quale ti fidi degli autori e degli editori in base ai quali è pubblicato, o sei uno studente, in che ti impegni in un gioco di finzione con il tuo istruttore durante il corso di studi.

risposta data 21.12.2014 - 23:18
fonte
1

Programmazione imperativa, programmazione dichiarativa, programmazione funzionale e programmazione orientata agli oggetti sono tutti "paradigmi di programmazione" - diversi modi di scrivere una soluzione per un problema.

La modellizzazione cognitiva è una soluzione a un problema (in particolare, una soluzione molto vecchia al problema della modellazione di "intelligenza"), e non un modo di scrivere una soluzione per un problema e non un paradigma di programmazione.

Potresti implementare la modellizzazione cognitiva con la programmazione imperativa (es. avere una funzione "piano (entità)") o implementare la modellazione cognitiva con OOP (ad es. avere un metodo "merman :: plan ()") o implementarla con funzionalità programmazione (es. avere una funzione "newstate = plan (oldState)").

Potresti anche inventare un linguaggio speciale (specifico per il dominio) per la modellizzazione cognitiva; e in tal caso il tuo linguaggio speciale potrebbe utilizzare qualsiasi paradigma di programmazione che ti piace.

    
risposta data 21.12.2014 - 21:13
fonte

Leggi altre domande sui tag