Thursday, 4 March 2021

Artificial Intelligence Programming Portfolio


 

Central Assignments Office (Middlesbrough Tower M2.08) Notes:

·        All work (including DVDs etc) needs to be secured in a plastic envelope or a folder and clearly marked with the student name, number and module title.

·        An Assignment Front Sheet should be fully completed before the work is submitted.

·        When Extenuating Circumstances (e.g. extension) has been granted, a fully completed and signed Extenuating Circumstances form must be submitted to the School Reception or emailed to scedt-assessments@tees.ac.uk.


Introduction

This ICA requires you to undertake the creation of three pieces of AI code using the Clojure programming language. It assesses all of the following learning outcomes and on successful completion of this module, the student will be able to:

 

Personal and Transferable Skills

1.  Communicate critical evaluations of complex programming concepts and solutions.

2.  Work collaboratively in small study teams to conduct research, develop software models and critically appraise the results obtained in the context of current research.

3.  Lead or participate in a small team to propose evidence-based decisions to a specified set of artificial intelligence problems.

4.  Select and apply appropriate problem solving methods, algorithms and language primitives appropriate for AI inference.

 

Research, Knowledge and Cognitive Skills

5.  Design, implement and evaluate inference engines for non-trivial problems.

6.  Build solutions to programming problems and critically appraise the results.

 

Professional Skills

7.  Autonomously adapt own approach in complex and unpredictable contexts.

 

Requirements

Students will develop a small portfolio of solutions to problems using concepts from functional and symbolic programming. The problems will address all learning outcomes. Students will work in small teams using established mechanisms for peer assessment which places responsibility on teams to critically appraise both the quality of team output and the contribution made by individuals within the team.

 

Student Responsibilities

You should attend and participate in all timetabled sessions for this module. These will predominantly take place in lab environments where you will undertake applicable and associated activities. You are expected to undertake additional practical worksheets that are disseminated periodically throughout the module.

You should undertake guided reading that will be recommended periodically to inform your personal study and research. It is essential you use this to inform your personal studies and activities.

You should submit all the necessary materials required for assessment of this module by the due dates given above.


There may be times when you need to seek advice or guidance on using the Library Services. This may include finding specific texts, literature searches, reading, note taking and/or academic report writing. Details can be found [here].

There may also be times when you need to seek additional Student Support to help you with other things surrounding your general studies. You can visit the Drop-In Centre, on campus in the Europa Building or online [here].

All of the above information is provided in order to support you with the necessary coursework and for you to get the most out of your studies.

 

Deliverables

Read these instructions carefully and follow them precisely. If you do not do so, you may lose (some or all) marks. You should attempt all three of the parts described below.

 

Part 1: Presentation problem

Choose one of the following problems and attempt all sub-parts for the chosen problem e.g. 1.1(a) and 1.1(b) for problem 1.1

 

Problem 1.1

(a)             Develop a function called bounds which takes a nested list of numbers as its only argument (i.e. a tree). Bounds should return the largest and smallest value in the tree. For example:

(bounds '(1 (-2 17 (4)) -8 (-6 13)))

==> (-8 17)

(b)                 As problem 1.1(a) but the tree may contain mixed values (not only numbers).

 

 

 

Problem 1.2

 

(a)             A function split takes a tree containing mixed data (symbols and numbers). Split returns a list of two structures, one containing all the symbols, the other containing all the numbers. NB: the ordering of data in the returned structure is not important.

(split '(1 (-2 dog 17 (4) cat) -8 (rat -6 13) mango))

==> {:nums (1 -2 17 4 -8 -6 13) :syms (dog cat rat mango)}

 

 

 

 

 

 

-- continued overleaf --


(b)            Similar to problem 1.2(a) but split now takes an argument which identifies how to split the data eg:

(split '(1 (-2 "string" dog [this is a vector] 17 (4) cat) -8 [and another vector] (rat -6 13) "blah" mango)

{:nums {:test number?}, :vects {:test vector?}

:syms {:test symbol?}})

==> {:nums {:test number?, :data (1 -2 17 4 -8 -6 13)}

:syms {:test symbol?, :data (dog cat rat mango)}

:vects {:test vector?,

:data ([this is a vector][and another vector])}

:other {:data ("string" "blah")}}

 

Problem 1.3

(a)             Write a function called nested-average, which takes a nested list of numbers as its only argument (i.e. a tree). The nested-average function should return the average of all numbers in the tree. For example

(nested-average ' (10 ((30 1) 20) (8 (5 (50 7)) 9) 40))

==> 18

(b)             Similar to 2.4 but the new function (called "stats") returns the smallest, largest, count and average profile of numbers in a tree. Values to be returned in a map.

(c)              As above but takes a sequence of comparators (like <, >=, or user defined) to determine which stats are returned.

 

 

 

-- continued overleaf --


Problem 1.4

(a)             Strict binary trees have two branches from each non-terminal node: a left branch and a right. We can conveniently represent binary trees using lists or vectors, for example:


can be represented as:

'[[[a b] c] [d [[e f] g]]]



Write a function maximum-tree-sum which takes a binary tree containing positive and negative numbers and returns the sum of numbers in the subtree which contains the largest of these sums. For example, with the tree below: the maximum-tree-sum is 10, summed from the blue subtree.

(b)             Extend problem 1.4 so it returns (i) the maximum tree-sum (ii) the minimum tree-sum

(iii) a sequence of all zero-sum subtrees.


Problem 1.5

(a) Strict binary trees have two branches from each non-terminal node: a left branch and a right branch. We can conveniently represent binary trees using lists or vectors, for


example:

 

 

...can be represented as:

'[[[a b] c] [d [[e f] g]]]

(a)             Write a function spin, which takes a binary tree as its argument and returns a tree formed by rotating each of the non-terminal nodes in the original tree. The tree above

 


would look like this...


(a)             Spin and palindrome: As problem 1.5 but also reports on any trees it finds which are palindromes.

(b)             Spin power-set: A spin-power-set (our term invented here) is a power-set of all trees where any of its subtrees may be spun/rotated or not. So:

[c [b a]], [[b a] c], [c [a b]], [[a b] c]

are all part of the same set but

[a, [b c]]

is not.

Write a function to return the spin-power-set of a tree.

 

Part 2: UVA problem

The UVA problem database is a collection of computing problems that can be coded using Clojure. The following links are to a selection of problems from that database, each link navigates to a PDF file of the problem specification. All problems are tree or graph related. Teams should choose one of the problems to solve

103 · 104 · 115 · 116 · 117 · 124 · 125 · 167 · 168 · 186 · 193

301 · 302 · 310 · 314 · 315 · 336 · 341 · 347 · 352 · 383

 

Part 3: Operators

You are required to build a small collection of state changing operators in the style used in lectures. Each operator will have preconditions, additions, deletions and a textual descriptor. You may invent new types of tuple as required by the problem you are given.

Problems are outlined below (see tutors for clarification if necessary). Your final collection of operators should work with the mops-search mechanism. You will be expected to demonstrate your operators using sample start and goal states. You should show the operation of mops-search with at least 3 start/goal combinations.

When designing your operators think about “what should be possible” not just what you will want them to do during a given test. Advanced solutions will also consider efficiency aspects of their operators. The problems specify some operators which you should build, you may also build others if this helps your solution.

 

An example operator

(def move-op

'{:txt [?agent moves from ?place1 to ?place2]

:pre ([isa ?agent agent] [at ?agent ?place1]

[next-to ?place1 ?place2])

:del ([at ?agent ?place1])

:add ([at ?agent ?place2])

})


Choose one of the problems from the following list:

 

Problem 3.1: Sliding doors

This scenario is concerned with doors. Doors can be in different states (open or closed, locked or unlocked). Doors connect rooms and are un/locked with specific keys.

Specify and build the following operators...

         open (an unlocked door)

         close (a door)

         lock (a door with a key)

         unlock (with a key)

         move (from one room to another)

 

Problem 3.2: Lifting

This scenario is based around using a lift. Agents can “call” a lift by pressing the button outside the lift door in a corridor, on calling a lift there will be a short delay then the lift will arrive and the doors will open. Once entering the lift a floor can be selected (using a button inside the lift). After selecting a floor, the lift doors will close and it will start to move. After a short delay it will reach the chosen floor and the doors will open. You may assume that your operators control all agents using the lift.

Specify and build the following operators...

         call-lift (from the corridor, assume that there is only one button per floor, not

         separate buttons to request a lift going up and another going down)

         select-floor (by pressing a button inside the lift)

         enter-lift (from the corridor)

         exit-lift (to the corridor)

         wait (for a lift after it is called)

         wait (for a lift to reach the selected floor)

 

Problem 3.3: Climbing

Some objects can be held by agents (grabbable objects), some can be platforms, and some can be climbed, some platforms can be climbed, and some climbable and/or platform objects are also ‘grabbable’.

A platform object can have other objects placed on top of it. Agents can pick/drop grabbable objects off/on a platform if they are standing on the platform.

Specify and build the following operators...


         climb-on (a climbable object at roughly the same position as the agent)

         climb-off (a climbable object)

         pick-off (an object from a platform)

         drop-on (an object on a platform)

NB: you must also be able to test your work using pick-up, drop and move (either as they were defined in lecture materials or with some modification).

 

 

Problem 3.4: Cranial loading

There is a small container terminal in Gliwice, Poland where containers are loaded/unloaded to/from boats. In 2010/11 researchers were investigating using STRIPS operators to automate this process. That much is true, the rest of this is fiction...

Boats arrive at one side of the terminal (one at a time), trains arrive at the other side. Boats and trains both have a line of places/platforms/locations where containers can be stacked.

The line of platforms on a boat/train are described with tuples like...

[platforms train-1 (t1 t2 t3 t4 t5 t6)]

A crane is positioned between the boat arrival side and the train arrival side. The crane can rotate but cannot move forward/backward along the terminal. Boats and trains can move, when train-1 is positioned to load/unload to/from platform p3, this will be represented by the tuple...

[position train-1 t3]

Boats and trains can move forwards and backwards (your operators should handle this but they do not need to deal with boats/trains moving off the terminal – this is managed by other operators).

Containers are stacked platform positions (for the sake of this exercise you can assume that there is no limit to the height of stacks). When the crane lifts a container it removes it from the top of a stack, when it places a container, it puts it on the top of a stack. Stacks are represented by the following type of tuple...

[stack t3 (a b c)]

...where a, b and c are containers (a is on the top of the stack).

 

Specify and build the following operators...

         lift-container          picks up a container from the top of the current stack

         place-container     puts a container onto the current stack

         rotate-crane           switch the crane from the boat side to the train side and vice-versa

         shunt-fwd               move a boat/train forward one platform/position (do nothing if this already at the last position in the sequence)


         shunt-back             move a boat/train backward one platform/position (do nothing if this already at the last position in the sequence)

 

 

Problem 3.4: Robot cars

In this example robot cars move stock materials around a small warehouse.

The warehouse is split into zones with one car in each zone. Cars cannot move between zones but it is possible to move stock from one zone to another because zones connect to each other by Exchanges – shared areas where one car can leave stock for another (note there is only room for one piece of stock in an exchange).

Each zone is laid out in a grid formation where Corridors run north-south or east-west and connect to each other at Junctions. The corridors are full of Bays – the bays are where stock is stored. So far so good but there is a small complication... the stock is mostly (you can assume always) longer than the width of the corridors so they can only be carried along the corridors if they correctly aligned this means that cars sometimes need to rotate stock at corridor junctions.

Specify and build operators to achieve the following...

         collect-stock           from the car's current bay/exchange (cars must already have travelled to the correct bay), note that cars can only hold one stock item at a

time (you may split this into 2 operators if you wish)

         deposit-stock         put the stock at the bay/exchange where the car is (you may split into 2 operators if you wish)

         move-to-bay           move a car to a bay in its current corridor

         move-to-junction move a car to a junction/exchange from its current corridor (you may combine this with other move operators if you wish)

         rotate-car                rotate a car (and its stock) this can only happen at a junction

You will also need to specify world knowledge (static/unchanging tuples) to capture details about which junctions connect to which corridors, where the bays are and the location of exchanges.

NB: ensure your definitions describe a world large enough to test but do not make it larger than necessary. If necessary you can write small helper functions to generate tuples from other data types.

 

Peer marks

         Groups will distribute 13 peer assessment points for each ICA part, individual marks will be calculated from the group mark and peer assessment points as explained under the

relevant section at DigMusic

         An individual’s overall mark will be a combination of their marks from each of the ICA parts (marks from all papers will have the same weighting)


Marking and submission

         Each part of the ICA will be marked during normal class time by a presentation made by the team to one or more members of staff.

         Group marks and feedback for the code will be given after each presentation.

         One member of each team should upload a ZIP file of the team's work to Blackboard on the same day as the presentation. The ZIP file should contain:

         source code

         any diagrams and/or supplementary text

         peer marks for all team members (out of 13)

 

Marking/grading criteria

This ICA counts for 100% of the overall module grade. The following learning outcomes will be assessed:

 

Personal and Transferable Skills

1.  Communicate critical evaluations of complex programming concepts and solutions.

2.  Work collaboratively in small study teams to conduct research, develop software models and critically appraise the results obtained in the context of current research.

3.  Lead or participate in a small team to propose evidence-based decisions to a specified set of artificial intelligence problems.

4.  Select and apply appropriate problem solving methods, algorithms and language primitives appropriate for AI inference.

 

Research, Knowledge and Cognitive Skills

5.  Design, implement and evaluate inference engines for non-trivial problems.

6.  Build solutions to programming problems and critically appraise the results.

 

Professional Skills

7.  Autonomously adapt own approach in complex and unpredictable contexts.

 

 

 

Portfolios of code will be assessed according to:

         The solutions to functional programming problems:

   Correctness of the solutions proposed

   Critique of the different possible solutions

   Appropriate and evidenced use of appropriate data structures


         The construction of inference mechanisms:

   The design and implementation of inference engines

   Algorithm development

   The evaluation and critique of possible solutions

   An appraisal of the use of symbolic, functional and/or declarative programming

It should be noted that any marks offered are provisional until they have been confirmed by the relevant Course Assessment Board and in accordance with University Assessment Regulations.





UK assignment helper

Author & Editor

We are the best assignment writing service provider in the UK. We can say it with pride that we tend to perceive our client’s requirements better than any other company. We provide assignment writing service in 100+ subjects.

0 comments:

Post a Comment