Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ca.uqac.lif.synthia.map;
package examples.parcel_shipment;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package ca.uqac.lif.synthia.map;
package examples.parcel_shipment;

import ca.uqac.lif.synthia.Picker;
import ca.uqac.lif.synthia.random.RandomInteger;

import java.util.ArrayList;
import java.util.List;

//Test
public class AreaMapPicker implements Picker<AreaMap>
{
protected Picker<Integer> m_widthPicker;
Expand Down
208 changes: 208 additions & 0 deletions Source/Examples/src/examples/parcel_shipment/Parcel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
package examples.parcel_shipment;
import ca.uqac.lif.synthia.Picker;
import ca.uqac.lif.synthia.random.RandomBoolean;

/**
* @author Marc-Antoine Plourde
*/
public class Parcel implements Picker<Point>
{
protected int m_id;
protected RandomBoolean m_direction;
protected RandomBoolean m_error;
protected Point m_initialLocation;
protected Point m_actualLocation;
protected Point m_destination;
protected int m_status;

private Parcel(int id,RandomBoolean direction,RandomBoolean error,Point initial_location, Point actual_location,
Point destination, int status)
{
m_id = id;
m_direction = direction;
m_initialLocation = initial_location;
m_actualLocation = actual_location;
m_destination = destination;
m_error =error;
m_status = status;
}

public Parcel(int id,RandomBoolean direction, RandomBoolean error, Point actual_location, Point destination)
{
m_id = id;
m_direction = direction;
m_error = error;
m_initialLocation = actual_location;
m_actualLocation = actual_location;
m_destination = destination;
m_status = 0;
}

public int getID()
{
return m_id;
}

public Point getActualLocation()
{
return m_actualLocation;
}

public Point getDestination()
{
return m_destination;
}

public int getStatus()
{
return m_status;
}

public boolean isArrived()
{
if ((m_actualLocation.getX() == m_destination.getX()) && (m_actualLocation.getY()
== m_destination.getY()))
{
return true;
}
else return false;
}

private void moveLeft()
{
m_actualLocation =new Point(m_actualLocation.getX()-1, m_actualLocation.getY());
}

private void moveRight()
{
m_actualLocation =new Point(m_actualLocation.getX()+1, m_actualLocation.getY());
}

private void moveUp()
{
m_actualLocation =new Point(m_actualLocation.getX(), m_actualLocation.getY()+1);
}

private void moveDown()
{
m_actualLocation =new Point(m_actualLocation.getX(), m_actualLocation.getY()-1);
}

private void horizontalMove()
{
if (m_actualLocation.getX()>m_destination.getX())
{
moveLeft();
}
else
{
moveRight();
}
}

private void verticalMove()
{
if(m_actualLocation.getY()>m_destination.getY())
{
moveDown();
}
else
{
moveUp();
}
}

@Override
public void reset()
{
m_actualLocation =new Point(m_initialLocation.getX(), m_initialLocation.getY());
m_direction.reset();
m_error.reset();
}

private void errorMove()
{
boolean error_move_vertical = m_direction.pick();
boolean positive_move = m_direction.pick();

if(error_move_vertical)
{
if (positive_move)
{
moveUp();
}
else
{
moveDown();
}
}
else
{
if (positive_move)
{
moveRight();
}
else
{
moveLeft();
}
}
}

@Override
public Point pick()
{
if (!isArrived())
{
boolean move_vertical = m_direction.pick();
boolean is_error =m_error.pick();

if (is_error)
{
errorMove();
}
else if ((move_vertical)&&(m_actualLocation.getY()==m_destination.getY()))
{

horizontalMove();
}
else if ((!move_vertical)&&(m_actualLocation.getX()==m_destination.getX()))
{
verticalMove();
}
else
{
if (move_vertical)
{
verticalMove();
}
else
{
horizontalMove();
}
}
}
return m_actualLocation;
}

@Override
public Parcel duplicate(boolean with_state)
{

if (with_state)
{
return new Parcel(m_id,m_direction.duplicate(true),m_error.duplicate(true),
new Point(m_initialLocation.getX(), m_initialLocation.getY()),
new Point(m_actualLocation.getX(), m_actualLocation.getY()),
new Point(m_destination.getX(),m_destination.getY()),m_status);
}
else
{
return new Parcel(m_id,m_direction.duplicate(false),m_error.duplicate(false),
new Point(m_initialLocation.getX(), m_initialLocation.getY()),
new Point(m_initialLocation.getX(), m_initialLocation.getY()),
new Point(m_destination.getX(),m_destination.getY()),m_status);
}

}
}
77 changes: 77 additions & 0 deletions Source/Examples/src/examples/parcel_shipment/ParcelPicker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package examples.parcel_shipment;

import ca.uqac.lif.synthia.Picker;

import ca.uqac.lif.synthia.random.RandomBoolean;
import ca.uqac.lif.synthia.random.RandomInteger;


public class ParcelPicker implements Picker<Parcel>
{
protected RandomInteger m_position; // internal picker

protected RandomBoolean m_directionParcel; // picker to create picker generation
protected RandomBoolean m_errorParcel; // picker to create picker generation

public ParcelPicker(RandomInteger position, RandomBoolean direction_parcel, RandomBoolean error_parcel)
{
m_position = position;

m_directionParcel = direction_parcel;
m_errorParcel = error_parcel;
}

public ParcelPicker(int radius, RandomBoolean direction_parcel, float error_rate)
{
radius = Math.abs(radius);
m_position = new RandomInteger(Math.negateExact(radius),radius);



m_directionParcel = direction_parcel;
m_errorParcel = new RandomBoolean(1 - error_rate); // the prob of getting true is 1 - error rate
}

@Override public void reset()
{
m_position.reset();
m_errorParcel.reset();
m_directionParcel.reset();
}

public void setParcelArea(int radius)
{
radius = Math.abs(radius);

m_position.setInterval(Math.negateExact(radius),radius);
}

public void setErrorRate(float error_rate)
{
error_rate = Math.abs(error_rate);
m_errorParcel.setTrueProbability(1-error_rate);
}


@Override public Parcel pick()
{

Point p1 =new Point(m_position.pick(), m_position.pick());
Point p2 =new Point(m_position.pick(), m_position.pick());

while ((p1.getX()==p2.getX()) && (p1.getY()==p2.getY()))
{
p2=new Point(m_position.pick(), m_position.pick());
}


return new Parcel(0, m_directionParcel, m_errorParcel, p1, p2);
}

@Override public ParcelPicker duplicate(boolean with_state)
{

return new ParcelPicker(m_position.duplicate(with_state), m_directionParcel.duplicate(with_state),
m_errorParcel.duplicate(with_state));
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ca.uqac.lif.synthia.map;
package examples.parcel_shipment;

public class Point
{
Expand Down