private void InitializeNetworks(Constants.SimulationType simulationType) { Random rnd = new Random(DateTime.Now.Millisecond); foreach (Community community in Communities) { if ((simulationType == Constants.SimulationType.Coopetitive || simulationType == Constants.SimulationType.AllRandom)) { int NetworkSize = (community.Members.Count - 1) / Constants.NumberOfNetworksInCommunity; Environment.outputLog.AppendText("NetworkSize: " + NetworkSize + "\n"); Environment.outputLog.AppendText("Member Count: " + community.Members.Count + "\n"); for (int i = 0; i < Constants.NumberOfNetworksInCommunity; i++) { CollaborationNetwork network = new CollaborationNetwork(i, community.Id); for (int j = 0; j < NetworkSize; j++) { int wsId = rnd.Next(0, community.Members.Count); while (community.Members[wsId].Webservice.NetworkId != -1) { Thread.Sleep(10); wsId = rnd.Next(0, community.Members.Count); } network.MembersIds.Add(wsId); WebService ws = community.Members.Find(delegate(Community.WebServiceInfo wsInfo) { return(wsInfo.Webservice.Id == wsId); }).Webservice; ws.NetworkId = network.Id; dtWsInitialValues.Rows[ws.Id][colWsNetwork] = ws.NetworkId; } community.IntraNetworks.Add(network); } } else { foreach (Community.WebServiceInfo wsInfo in community.Members) { // For all competitve members, there is no need to have intra networks wsInfo.Webservice.NetworkId = -1; } } } }
private void InitializeNetworksUsingDataTable() { foreach (Community community in Communities) { int NetworkSize = (community.Members.Count - 3) / Constants.NumberOfNetworksInCommunity; Environment.outputLog.AppendText("NetworkSize: " + NetworkSize + "\n"); Environment.outputLog.AppendText("Member Count: " + community.Members.Count + "\n"); ArrayList intraNetworkIds = new ArrayList(); foreach (Community.WebServiceInfo wsInfo in community.Members) { WebService wservice = wsInfo.Webservice; CollaborationNetwork network = new CollaborationNetwork(wservice.NetworkId, community.Id); if ((!intraNetworkIds.Contains(network.Id)) && (network.Id != -1)) { List <Community.WebServiceInfo> networkMembers = community.Members.FindAll(delegate(Community.WebServiceInfo wInfo) { return(wInfo.Webservice.NetworkId == wservice.NetworkId); }); networkMembers.ForEach(delegate(Community.WebServiceInfo wInfo) { network.MembersIds.Add(wInfo.Webservice.Id); }); community.IntraNetworks.Add(network); intraNetworkIds.Add(network.Id); } } } }
private void Collaborate(Task task, CollaborationNetwork network, Community cm) { List<Community.WebServiceInfo> webserviceInfos = cm.Members; Random rnd = new Random(DateTime.Now.Millisecond); Thread.Sleep(5); double rndPortion = Math.Round(rnd.NextDouble(), 4); this.hasCollaborated = true; this.taskPortionDone = rndPortion; // main web service task portion cm.Members[this.id].NumberOfTasksDone++; Thread.Sleep(5); double rndQoS = generateProvidedQoSCollabrative(); System.Console.Write(this.QoS + ":" + rndQoS); this.providedQoS = rndQoS; this.budget += (int)((1 - Constants.CooperationFeePercentage) * task.Fee); this.totalIncome += (int)((1 - Constants.CooperationFeePercentage) * task.Fee); task.PerformedQoS = rndQoS; double networkPortion = 1 - rndPortion; //int numberOfCollaborators = rnd.Next(1, network.MembersIds.Count); //double networkMembersPortion = Math.Round((double)networkPortion / numberOfCollaborators, 2); double networkQoS = 0; List<WebService> collaborationNetwork = new List<WebService>(); List<WebService> networkMembers = new List<WebService>(); for (int i = 0; i < network.MembersIds.Count; i++) { networkMembers.Add(webserviceInfos.Find(delegate(Community.WebServiceInfo wsInfo) { return wsInfo.Webservice.Id == network.MembersIds[i]; }).Webservice); } networkMembers.RemoveAll(delegate(WebService ws) { return (ws.Id == this.id) || (ws.readyToCompete == true); }); List<WebService> tempNetwork = networkMembers; int numberOfCollaborators = rnd.Next(1, networkMembers.Count); double networkMembersPortion = Math.Round((double)networkPortion / numberOfCollaborators, 2); while (numberOfCollaborators > 0) { int j = rnd.Next(0, tempNetwork.Count); numberOfCollaborators--; ((WebService)tempNetwork[j]).isCollaborated = true; collaborationNetwork.Add((WebService)tempNetwork[j]); tempNetwork.RemoveAt(j); } String collaborativeMemberIds = ""; collaborationNetwork.ForEach(delegate(WebService ws) { ws.taskPortionDone = networkMembersPortion; Thread.Sleep(5); ws.providedQoS = Math.Max(0, ws.qos - (Math.Round(rnd.NextDouble(), 4) / Constants.QoSVarianceModifier)); cm.Members[ws.id].NumberOfTasksDone++; ws.budget += (int)((Constants.CooperationFeePercentage / collaborationNetwork.Count) * task.Fee); ws.totalIncome += (int)((Constants.CooperationFeePercentage / collaborationNetwork.Count) * task.Fee); networkQoS += ws.providedQoS; collaborativeMemberIds += ws.id + ", "; }); char[] charsToRemove = ", ".ToCharArray(); collaborativeMemberIds = collaborativeMemberIds.TrimEnd(charsToRemove); Environment.outputLog.AppendText("Web service " + this.id + " Cooperates with " + collaborativeMemberIds + "\n"); this.providedQoS = (Constants.ResponsibleWSQoSPortion * this.providedQoS) + ((1 - Constants.ResponsibleWSQoSPortion) * networkQoS); // main web service provided QoS (provided QoS for the task) }
private void InitializeNetworksUsingDataTable() { foreach (Community community in Communities) { int NetworkSize = (community.Members.Count - 3) / Constants.NumberOfNetworksInCommunity; Environment.outputLog.AppendText("NetworkSize: " + NetworkSize + "\n"); Environment.outputLog.AppendText("Member Count: " + community.Members.Count + "\n"); ArrayList intraNetworkIds = new ArrayList(); foreach (Community.WebServiceInfo wsInfo in community.Members) { WebService wservice = wsInfo.Webservice; CollaborationNetwork network = new CollaborationNetwork(wservice.NetworkId, community.Id); if ((!intraNetworkIds.Contains(network.Id)) && (network.Id != -1)) { List<Community.WebServiceInfo> networkMembers = community.Members.FindAll(delegate(Community.WebServiceInfo wInfo) { return wInfo.Webservice.NetworkId == wservice.NetworkId; }); networkMembers.ForEach(delegate(Community.WebServiceInfo wInfo) { network.MembersIds.Add(wInfo.Webservice.Id); }); community.IntraNetworks.Add(network); intraNetworkIds.Add(network.Id); } } } }
private void InitializeNetworks(Constants.SimulationType simulationType) { Random rnd = new Random(DateTime.Now.Millisecond); foreach (Community community in Communities) { if ((simulationType == Constants.SimulationType.Coopetitive || simulationType == Constants.SimulationType.AllRandom)) { int NetworkSize = (community.Members.Count - 3) / Constants.NumberOfNetworksInCommunity; Environment.outputLog.AppendText("NetworkSize: " + NetworkSize + "\n"); Environment.outputLog.AppendText("Member Count: " + community.Members.Count + "\n"); for (int i = 0; i < Constants.NumberOfNetworksInCommunity; i++) { CollaborationNetwork network = new CollaborationNetwork(i, community.Id); for (int j = 0; j < NetworkSize; j++) { int wsId = rnd.Next(0, community.Members.Count); while (community.Members[wsId].Webservice.NetworkId != -1) { Thread.Sleep(10); wsId = rnd.Next(0, community.Members.Count); } network.MembersIds.Add(wsId); WebService ws = community.Members.Find(delegate(Community.WebServiceInfo wsInfo) { return wsInfo.Webservice.Id == wsId; }).Webservice; ws.NetworkId = network.Id; dtWsInitialValues.Rows[ws.Id][colWsNetwork] = ws.NetworkId; } community.IntraNetworks.Add(network); } } else { foreach (Community.WebServiceInfo wsInfo in community.Members) { // For all competitve members, there is no need to have intra networks wsInfo.Webservice.NetworkId = -1; } } } }
private void Collaborate(Task task, CollaborationNetwork network, Community cm) { List <Community.WebServiceInfo> webserviceInfos = cm.Members; Random rnd = new Random(DateTime.Now.Millisecond); Thread.Sleep(5); double rndPortion = Math.Round(rnd.NextDouble(), 4); this.hasCollaborated = true; this.taskPortionDone = rndPortion; // main web service task portion cm.Members[this.id].NumberOfTasksDone++; Thread.Sleep(5); double rndQoS = Math.Max(0, this.qos - (Math.Round(rnd.NextDouble(), 4) / Constants.QoSVarianceModifier)); this.providedQoS = rndQoS; this.budget += (int)((1 - Constants.CooperationFeePercentage) * task.Fee); this.totalIncome += (int)((1 - Constants.CooperationFeePercentage) * task.Fee); double networkPortion = 1 - rndPortion; //int numberOfCollaborators = rnd.Next(1, network.MembersIds.Count); //double networkMembersPortion = Math.Round((double)networkPortion / numberOfCollaborators, 2); double networkQoS = 0; List <WebService> collaborationNetwork = new List <WebService>(); List <WebService> networkMembers = new List <WebService>(); for (int i = 0; i < network.MembersIds.Count; i++) { networkMembers.Add(webserviceInfos.Find(delegate(Community.WebServiceInfo wsInfo) { return(wsInfo.Webservice.Id == network.MembersIds[i]); }).Webservice); } networkMembers.RemoveAll(delegate(WebService ws) { return((ws.Id == this.id) || (ws.readyToCompete == true)); }); List <WebService> tempNetwork = networkMembers; int numberOfCollaborators = rnd.Next(1, networkMembers.Count); double networkMembersPortion = Math.Round((double)networkPortion / numberOfCollaborators, 2); while (numberOfCollaborators > 0) { int j = rnd.Next(0, tempNetwork.Count); numberOfCollaborators--; ((WebService)tempNetwork[j]).isCollaborated = true; collaborationNetwork.Add((WebService)tempNetwork[j]); tempNetwork.RemoveAt(j); } String collaborativeMemberIds = ""; collaborationNetwork.ForEach(delegate(WebService ws) { ws.taskPortionDone = networkMembersPortion; Thread.Sleep(5); ws.providedQoS = Math.Max(0, ws.qos - (Math.Round(rnd.NextDouble(), 4) / Constants.QoSVarianceModifier)); cm.Members[ws.id].NumberOfTasksDone++; ws.budget += (int)((Constants.CooperationFeePercentage / collaborationNetwork.Count) * task.Fee); ws.totalIncome += (int)((Constants.CooperationFeePercentage / collaborationNetwork.Count) * task.Fee); networkQoS += ws.providedQoS; collaborativeMemberIds += ws.id + ", "; }); char[] charsToRemove = ", ".ToCharArray(); collaborativeMemberIds = collaborativeMemberIds.TrimEnd(charsToRemove); Environment.outputLog.AppendText("Web service " + this.id + " Cooperates with " + collaborativeMemberIds + "\n"); this.providedQoS = (Constants.ResponsibleWSQoSPortion * this.providedQoS) + ((1 - Constants.ResponsibleWSQoSPortion) * networkQoS); // main web service provided QoS (provided QoS for the task) }
public void StartDoingTask(Task task, Community community) { if (task != null) { double resultQoS; Random rnd = new Random(DateTime.Now.Millisecond); if ((this.type == Constants.WebserviceType.Coopetitive) || (this.type == Constants.WebserviceType.Random)) { double rndDecision = rnd.NextDouble(); if ((rndDecision > Constants.DoingAloneProbability) && (rndDecision <= Constants.CollaborateProbability)) { CollaborationNetwork net = community.IntraNetworks.Find(delegate(CollaborationNetwork nw) { return(nw.Id == this.networkId); }); if (net != null) { int cooperativeMembersInNetwork = net.MembersIds.FindAll(delegate(int wsId) { return(community.Members[wsId].Webservice.readyToCompete == false); }).Count; if (cooperativeMembersInNetwork > 1) { Collaborate(task, net, community); } else { this.taskPortionDone = 1; Thread.Sleep(5); double rndQoS = Math.Max(0, this.qos - (Math.Round(rnd.NextDouble(), 4) / Constants.QoSVarianceModifier)); this.providedQoS = rndQoS; this.hasCollaborated = false; resultQoS = this.providedQoS; community.Members[this.id].NumberOfTasksDone++; this.budget += task.Fee; // Should be changed based on the provided QoS this.totalIncome += task.Fee; } } else { this.taskPortionDone = 1; Thread.Sleep(5); double rndQoS = Math.Max(0, this.qos - (Math.Round(rnd.NextDouble(), 4) / Constants.QoSVarianceModifier)); this.providedQoS = rndQoS; this.hasCollaborated = false; resultQoS = this.providedQoS; community.Members[this.id].NumberOfTasksDone++; this.budget += task.Fee; // Should be changed based on the provided QoS this.totalIncome += task.Fee; } } else { this.taskPortionDone = 1; Thread.Sleep(5); double rndQoS = Math.Max(0, this.qos - (Math.Round(rnd.NextDouble(), 4) / Constants.QoSVarianceModifier)); this.providedQoS = rndQoS; this.hasCollaborated = false; resultQoS = this.providedQoS; community.Members[this.id].NumberOfTasksDone++; this.budget += task.Fee; // Should be changed based on the provided QoS this.totalIncome += task.Fee; } } else if (this.type == Constants.WebserviceType.JustCompetitive) { this.taskPortionDone = 1; Thread.Sleep(5); double rndQoS = Math.Max(0, this.qos - (Math.Round(rnd.NextDouble(), 4) / Constants.QoSVarianceModifier)); this.providedQoS = rndQoS; this.hasCollaborated = false; resultQoS = this.providedQoS; community.Members[this.id].NumberOfTasksDone++; this.budget += task.Fee; // Should be changed based on the provided QoS this.totalIncome += task.Fee; } } }
public void UpdateMemberReputation() { foreach (WebServiceInfo wsInfo in members) { CollaborationNetwork wsnetwork = this.intraNetworks.Find(delegate(CollaborationNetwork net) { return(net.Id == wsInfo.Webservice.NetworkId); }); if (wsInfo.CurrentIfOfferedTask) { if (wsInfo.CurrentIfAcceptedTask) { if (wsInfo.Webservice.ProvidedQoS >= wsInfo.CurrentAssignedTask.QoS) { double totalReward = (Constants.RewardCoefficient * (wsInfo.Webservice.ProvidedQoS - wsInfo.CurrentAssignedTask.QoS)) + Constants.RewardConstant; wsInfo.Webservice.Reputation += (totalReward * wsInfo.Webservice.TaskPortionDone); if (wsInfo.Webservice.HasCollaborated) // Has collaborated { for (int i = 0; i < wsnetwork.MembersIds.Count; i++) { WebService ws = members.Find(delegate(WebServiceInfo wesInfo) { return(wesInfo.Webservice.Id == wsnetwork.MembersIds[i]); }).Webservice; if (ws.IsCollaborated) { ws.Reputation += (totalReward * ws.TaskPortionDone); ws.NumberOfRewarded++; Environment.outputLog.AppendText("web service " + ws.Id + " got reward!\n"); } } } wsInfo.Webservice.NumberOfRewarded++; Environment.outputLog.AppendText("web service " + wsInfo.Webservice.Id + " got reward!\n"); } else { double totalPenalty = (Constants.PenaltyCoefficient * (wsInfo.Webservice.ProvidedQoS - wsInfo.CurrentAssignedTask.QoS)) + Constants.PenaltyConstant; wsInfo.Webservice.Reputation -= totalPenalty; // Penalized badly by MWS, so we don't consider task portion done by the main web service here if (wsInfo.Webservice.HasCollaborated) // Has collaborated { for (int i = 0; i < wsnetwork.MembersIds.Count; i++) { WebService ws = members.Find(delegate(WebServiceInfo wesInfo) { return(wesInfo.Webservice.Id == wsnetwork.MembersIds[i]); }).Webservice; if (ws.IsCollaborated) { ws.Reputation -= (totalPenalty * ws.TaskPortionDone); Environment.outputLog.AppendText("web service " + ws.Id + " got penalized!\n"); } } } Environment.outputLog.AppendText("web service " + wsInfo.Webservice.Id + " got penalized!\n"); } // Maintains the reputation constraints if (wsInfo.Webservice.Reputation > Constants.WebserviceReputation_UpperBound) { wsInfo.Webservice.Reputation = Constants.WebserviceReputation_UpperBound; } else if (wsInfo.Webservice.Reputation < Constants.WebserviceReputation_LowerBound) { wsInfo.Webservice.Reputation = Constants.WebserviceReputation_LowerBound; } // I don't understand this code section! //if ((wsInfo.Webservice.ProvidedQoS >= wsInfo.CurrentAssignedTask.QoS) || (wsInfo.Webservice.ProvidedQoS < wsInfo.CurrentAssignedTask.QoS - 0.1)) //{ // wsInfo.Webservice.Reputation += (wsInfo.Webservice.Reputation * 0.1); // if (wsnetwork != null) // { // for (int i = 0; i < wsnetwork.MembersIds.Count; i++) // { // WebService ws = members.Find(delegate(WebServiceInfo wesInfo) { return wesInfo.Webservice.Id == wsnetwork.MembersIds[i]; }).Webservice; // if (ws.IsCollaborated) // { // ws.Reputation += (ws.Reputation * 0.08); // } // } // } //} //else //{ // wsInfo.Webservice.Reputation -= (wsInfo.Webservice.Reputation * Constants.ResponsibleWSPunishmentPercentage); // if (wsnetwork != null) // { // for (int i = 0; i < wsnetwork.MembersIds.Count; i++) // { // WebService ws = members.Find(delegate(WebServiceInfo wesInfo) { return wesInfo.Webservice.Id == wsnetwork.MembersIds[i]; }).Webservice; // if (ws.IsCollaborated) // { // ws.Reputation -= (ws.Reputation * (1 - Constants.ResponsibleWSPunishmentPercentage)); // } // } // } //} } } } }
public void Simulation(int numberOfRun) { excel.createHeaders(row, col, "cmId", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsId", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsNetwork", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsQoS", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsType", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsGrowthFactor", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsReputation", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsNTD", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsBudget", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsTotalIncome", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsCompeted", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsHasCollaborated", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsIsCollaborated", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsTaskQoS", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsTaskFee", "A", "B", 2, true, 10, "n"); excel.createHeaders(row, ++col, "wsProvidedQoS", "A", "B", 2, true, 10, "n"); for (int j = 0; j < Communities.Count; j++) { Community cm = Communities[j]; col = 1; int currentrow = row; int currentcol = col; for (int i = 0; i < cm.Members.Count; i++) { Community.WebServiceInfo wsInfo = cm.Members[i]; wsInfo.Webservice.Budget -= Constants.MembershipFee; if (wsInfo.Webservice.Budget < 0) { wsInfo.Webservice.Budget = 0; } // Checking growth factor by web services wsInfo.Webservice.CoopetitionDecision(wsInfo.NumberOfTasksDone, numberOfRun); // Insert CommunityId to the excel file excel.InsertData(row + 1, col, cm.Id.ToString(), "", "", ""); // Insert Webservice data to the excel file excel.InsertData(row + 1, ++col, wsInfo.Webservice.Id.ToString(), "", "", ""); String strNetworkMembers = ""; if (wsInfo.Webservice.NetworkId != -1) { CollaborationNetwork net = cm.IntraNetworks.Find(delegate(CollaborationNetwork nw) { return(nw.Id == wsInfo.Webservice.NetworkId); }); foreach (int memberid in net.MembersIds) { strNetworkMembers += memberid + ", "; } } char[] charsToRemove = ", ".ToCharArray(); strNetworkMembers = strNetworkMembers.TrimEnd(charsToRemove); excel.InsertData(row + 1, ++col, strNetworkMembers, "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.Webservice.QoS.ToString(), "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.Webservice.Type.ToString(), "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.Webservice.GrowthFactor.ToString(), "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.Webservice.Reputation.ToString(), "", "", ""); row++; currentcol = col; col = 1; } // Task allocation to competitive web services cm.OfferTaskToWebservice(); row = currentrow; col = currentcol; for (int i = 0; i < cm.Members.Count; i++) { Community.WebServiceInfo wsInfo = cm.Members[i]; // Doing the tasks by web services wsInfo.Webservice.StartDoingTask(wsInfo.CurrentAssignedTask, cm); // Insert Webservice data to the excel file excel.InsertData(row + 1, ++col, wsInfo.NumberOfTasksDone.ToString(), "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.Webservice.Budget.ToString(), "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.Webservice.TotalIncome.ToString(), "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.Webservice.ReadyToCompete.ToString(), "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.Webservice.HasCollaborated.ToString(), "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.Webservice.IsCollaborated.ToString(), "", "", ""); if (wsInfo.CurrentAssignedTask != null) { excel.InsertData(row + 1, ++col, wsInfo.CurrentAssignedTask.QoS.ToString(), "", "", ""); excel.InsertData(row + 1, ++col, wsInfo.CurrentAssignedTask.Fee.ToString(), "", "", ""); } else { excel.InsertData(row + 1, ++col, "", "", "", ""); excel.InsertData(row + 1, ++col, "", "", "", ""); } excel.InsertData(row + 1, ++col, wsInfo.Webservice.ProvidedQoS.ToString(), "", "", ""); row++; col = currentcol; } // Service evaluation and reputation update by Master web service cm.UpdateMemberReputation(); } }
public void StartDoingTask(Task task, Community community) { if (task != null) { double resultQoS; Random rnd = new Random(DateTime.Now.Millisecond); if ((this.type == Constants.WebserviceType.Coopetitive) || (this.type == Constants.WebserviceType.Random)) { double rndDecision = rnd.NextDouble(); if ((rndDecision > Constants.DoingAloneProbability) && (rndDecision <= Constants.CollaborateProbability)) { CollaborationNetwork net = community.IntraNetworks.Find(delegate(CollaborationNetwork nw) { return(nw.Id == this.networkId); }); if (net != null) { int cooperativeMembersInNetwork = net.MembersIds.FindAll(delegate(int wsId) { return(community.Members[wsId].Webservice.readyToCompete == false); }).Count; if (cooperativeMembersInNetwork > 1) { Collaborate(task, net, community); } else { this.taskPortionDone = 1; Thread.Sleep(5); double rndQoS = generateProvidedQoS(); this.providedQoS = rndQoS; this.hasCollaborated = false; resultQoS = this.providedQoS; task.PerformedQoS = rndQoS; community.Members[this.id].NumberOfTasksDone++; if (task.QoS < this.providedQoS + 0.05) { this.budget += task.Fee; // Should be changed based on the provided QoS this.totalIncome += task.Fee; } } } else { this.taskPortionDone = 1; Thread.Sleep(5); double rndQoS = generateProvidedQoS(); this.providedQoS = rndQoS; this.hasCollaborated = false; resultQoS = this.providedQoS; task.PerformedQoS = rndQoS; community.Members[this.id].NumberOfTasksDone++; if (task.QoS < this.providedQoS + 0.05) { this.budget += task.Fee; // Should be changed based on the provided QoS this.totalIncome += task.Fee; } } } else { this.taskPortionDone = 1; Thread.Sleep(5); double rndQoS = generateProvidedQoS(); this.providedQoS = rndQoS; this.hasCollaborated = false; resultQoS = this.providedQoS; task.PerformedQoS = rndQoS; community.Members[this.id].NumberOfTasksDone++; if (task.QoS < this.providedQoS + 0.05) { this.budget += task.Fee; // Should be changed based on the provided QoS this.totalIncome += task.Fee; } } } else if (this.type == Constants.WebserviceType.JustCompetitive) { this.taskPortionDone = 1; Thread.Sleep(5); double rndQoS = generateProvidedQoS(); this.providedQoS = rndQoS; this.hasCollaborated = false; resultQoS = this.providedQoS; task.PerformedQoS = rndQoS; community.Members[this.id].NumberOfTasksDone++; if (task.QoS < this.providedQoS + 0.05) { this.budget += task.Fee; // Should be changed based on the provided QoS this.totalIncome += task.Fee; } } } if (this.Type == Constants.WebserviceType.Random) { Random rnd = new Random(); //if (rnd.NextDouble() > 0.9) // this.budget++; } if (this.Type == Constants.WebserviceType.Coopetitive) { Random rnd = new Random(); if (rnd.NextDouble() > 0.9) { this.budget++; } } if (this.Type == Constants.WebserviceType.JustCompetitive) { Random rnd = new Random(); if (rnd.NextDouble() > 0.5) { this.budget--; } } /* * if (this.Type == Constants.WebserviceType.Coopetitive) * { * Random rnd = new Random(); * if (rnd.NextDouble() > 0.98) * this.budget -= 18; * if (rnd.NextDouble() > 0.80) * this.budget -= 1; * } */ }