コード例 #1
0
ファイル: Environment.cs プロジェクト: V838Monocerotis/coopv2
        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;
                    }
                }
            }
        }
コード例 #2
0
ファイル: Environment.cs プロジェクト: V838Monocerotis/coopv2
        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);
                    }
                }
            }
        }
コード例 #3
0
ファイル: WebService.cs プロジェクト: Marooned202/coopv2
        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)
        }
コード例 #4
0
ファイル: Environment.cs プロジェクト: mahsaa/Coopetition
        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);
                    }

                }
            }
        }
コード例 #5
0
ファイル: Environment.cs プロジェクト: mahsaa/Coopetition
 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;
             }
         }
     }
 }
コード例 #6
0
        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)
        }
コード例 #7
0
        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;
                }
            }
        }
コード例 #8
0
        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));
                        //            }
                        //        }
                        //    }
                        //}
                    }
                }
            }
        }
コード例 #9
0
ファイル: Environment.cs プロジェクト: V838Monocerotis/coopv2
        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();
            }
        }
コード例 #10
0
        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;
             * }
             */
        }