CSCI.6500/CSCI.4500 Distributed Computing over the Internet

Spring, 2019

Programming Assignment 2.

This project is to be done individually or in pairs. Do not show your code to any other student/group and do not look at any other student/group's code. Do not put your code in a public directory or otherwise make it public. You are encouraged to use the LMS Discussions page to post problems so that other students can also answer and see the answers.

The goal of this assignment is to practice concurrent and distributed programming using an actor programming language, such as SALSA.

You are to analyze flights' data from ADS-B Exchange, in particular, flights 2, 20, 200, 1500 nautical miles (nmi) around JFK Airport to detect potential Near Mid-Air Collisions (NMAC). Your program needs to compute the following:

For each computation, output multiple answers if there are ties. For example, when computing DCPA or TCPA, if there are multiple pairs with the same minimum pairwise value, output all pairs.

More information on ADS-B can be found in the associated ADS-B Data Field Descriptions and ADS-B Exchange Forum.

More information about DCPA and TCPA calculation can be found in A Family of Well-Clear Boundary Models for the Integration of UAS in the NAS, pp 3.

You are given an ADS-B text file with a flight per line, detailing Id, Latitude, Longitude, Trak (0º=North, 90º=East), Horizontal Speed (knots), Altitude (feet), Vertical Speed (feet per minute). Please remove duplicate and empty-value entries in your program. Your output should look as follows:

d1  // minimal pairwise distance
id1 id2
id3 id4
...

d2  // minimal pairwise DCPA
id1 lat1 long1 alt1 id2 lat2 long2 alt2
...

t3 // minimal pairwise TCPA
id1 lat1 long1 alt1 id2 lat2 long2 alt2
...
where d_i denotes a distance (nmi), t_i denotes a time (seconds) and id_i denotes a flight id, and (lat,long,alt) corresponds to the position of each aircraft at DCPA/TCPA. You may use the formula for destination point given distance and bearing from starting point available at https://www.movable-type.co.uk/scripts/latlong.html, and assume a constant vertical speed.

Part 1 - Concurrent Solution

Write an actor-based solution to the NMAC detection problem.

Part 2 - Distributed Solution

Write a distributed NMAC solution. Note that in this case, the actors must communicate over a network although you do not necessarily have to run each actor on a separate machine. When using SALSA, your solution will be distributed if you make use of universal actors.

Time-Saving Hints

  1. For reference, please see the SALSA webpage, including its FAQ. Read the tutorial and a comprehensive example illustrating distributed programming in SALSA.
  2. salsac and salsa are UNIX aliases or Windows batch scripts that run java and javac with the expected arguments: See .cshrc for UNIX, and salsac.bat salsa.bat for Windows.
  3. To run the distributed program, first, run the name server and the theaters:

    [host0:dir0]$ wwcns [port number 0]
    [host1:dir1]$ wwctheater [port number 1]
    [host2:dir2]$ wwctheater [port number 2]
    ...
    
    where wwcns and wwctheater are UNIX aliases or Windows batch scripts: See .cshrc for UNIX, and wwcns.bat wwctheater.bat for Windows. Make sure that the theaters are run where the actor behavior code is available, that is, the pa2 directory should be visible in directories: host1:dir1 and host2:dir2. Then, run the distributed program as mentioned above.

  4. The theaters all cache actor behaviors. Restart all the theaters each time changes are made to the code.
  5. The module/behavior names in SALSA must match the directory/file hierarchical structure in the file system. e.g., a NMAC behavior should be in a relative path pa2/NMAC.salsa, and should start with the line module pa2;.
  6. Messaging is asynchronous. m1(...);m2(...); does not imply m1 occurs before m2.
  7. Notice that in the code m(...)@n(...);, n is processed after m is executed, but not necessarily after messages sent inside m are executed. For example, if inside m, messages m1 and m2 are sent, in general, n could happen before m1 and m2.
  8. (Named) tokens can only be used as arguments to messages.

Due Date: March 26th, 6:00PM

Grading: The assignment will be graded mostly on correctness, but code clarity / readability will also be a factor (comment, comment, comment!).

Submission Requirements: Please submit a ZIP file with your code, including a README file. In the README file, place the names of each group member. Your README file should also have a list of specific features / bugs in your solution. Your ZIP file should be named with your LMS user name(s) as the filename, either userid1.zip or userid1_userid2.zip. Only submit one assignment per pair via LMS.