/* Copyright (c) [2023] [pcm] [pcm-coordinator] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. */ package algo type strategyService interface { computeMaxScore() (*Task, error) } func ScheduleWithFullCollaboration(strategyService strategyService, ProviderList []*Provider) (*Task, error) { task, err := strategyService.computeMaxScore() if err != nil { return nil, err } //计算任务i的resourcePerTask属性 for i, _ := range ProviderList { tasksolu := task.MaxscoreStrategy.Tasksolution[i] // 第j个提供商分到的任务数 resourcesolu := task.MaxscoreStrategy.Resourcesolution[0][i] // 第j个提供商分到的资源数 // 在第j个云提供商处声明一个长度为资源数的链表 resourcePerTaskPerProviders := make([]int, resourcesolu) if tasksolu > 0 { for tasksolu > 0 { for j := 0; j < resourcesolu; j++ { resourcePerTaskPerProviders[j] += 1 tasksolu -= 1 } } } else if tasksolu == 0 { resourcePerTaskPerProviders = []int{0} } task.ResourcePerTask = append(task.ResourcePerTask, resourcePerTaskPerProviders) } return task, nil }