private List <Tuple <int, int> > SetSocialLaw(List <string> messages) { if (!messages.Exists(m => FibaAcl.GetPerformative(m) == "inform")) { return(null); } var informMsg = messages.First(m => FibaAcl.GetPerformative(m) == "inform"); var content = FibaAcl.MessageToDict(FibaAcl.GetInnerMessage(informMsg)); var directive = content["content"]; var temp = directive.Substring(directive.IndexOf('(') + 1, directive.Length - directive.IndexOf('(') - 2); var pos = temp.Split(','); var posTuple = new Tuple <int, int>(int.Parse(pos[0]), int.Parse(pos[1])); var colsTuple = new Tuple <int, int>(posTuple.Item2, posTuple.Item2 + _room.GetLength(1) / Platform.Directory.Count - 1); var result = new List <Tuple <int, int> >(); var startRow = _room.GetLength(0) - 1; var dx = -1; // Generate path to clean for (var col = colsTuple.Item1; col <= colsTuple.Item2; col++) { startRow = startRow == _room.GetLength(0) - 1 ? 0 : _room.GetLength(0) - 1; dx = dx == -1 ? 1 : -1; for (var row = startRow; row < _room.GetLength(0) && row >= 0; row += dx) { result.Add(new Tuple <int, int>(row, col)); } } return(result); }
public void Bid(IEnumerable <string> tasks) { var n = _room.GetLength(0); _wishList.Clear(); foreach (var task in tasks) { var innerMessage = FibaAcl.GetInnerMessage(task); var messageDict = FibaAcl.MessageToDict(innerMessage); var content = messageDict["content"]; var subtask = content.Substring(0, content.IndexOf('(')); var cols = new string[2]; switch (subtask) { case "clean": var temp = content.Substring(content.IndexOf('(') + 1, content.Length - content.IndexOf('(') - 2); cols = temp.Split(','); break; } var colRange = new Tuple <int, int>(int.Parse(cols[0]), int.Parse(cols[1])); for (var i = colRange.Item1; i < colRange.Item2; i++) { // Distance to extreme points for each column var end1 = new Tuple <int, int>(0, i); var end2 = new Tuple <int, int>(n - 1, i); var dist1 = ManhattanDistance(end1, new Tuple <int, int>(X, Y)); var dist2 = ManhattanDistance(end2, new Tuple <int, int>(X, Y)); _wishList.Add(new Tuple <double, Tuple <int, int> >(dist1, end1)); _wishList.Add(new Tuple <double, Tuple <int, int> >(dist2, end2)); } } _wishList.Sort(Comparison); foreach (var bid in _wishList) { Language.Message(Performative.Proposal, Id.ToString(), Platform.Manager.Id.ToString(), bid.Item1 + "," + bid.Item2.Item1 + "," + bid.Item2.Item2); } }