掌握Python:深入Stepik的控制tour_task教程

需积分: 5 0 下载量 158 浏览量 更新于2024-12-09 收藏 21KB ZIP 举报
资源摘要信息:"stepik_tours_pt_2:Stepik的第二控制tour_task" 从提供的文件信息来看,本资源涉及的主体是Stepik平台上的一个名为“tour_task”的教学单元,该单元被称为“第二控制tour_task”,并且它被标记为与Python语言相关的教学内容。尽管文件名称列表中仅提供了一个与项目相关的目录名称“stepik_tours_pt_2-master”,没有具体提及该项目的详细文件内容,我们仍然可以从中提取和假设相关知识点。 根据标题和描述,我们可以推测“tour_task”是一个旨在帮助学习者通过一系列步骤来掌握Python编程中某个具体概念或技能的教学模块。在这个模块中,学习者将逐步完成一系列控制流(如条件判断、循环等)相关的编程任务,即“第二控制tour_task”表明这是针对Python控制结构的进阶学习内容。通常,控制流是编程中不可或缺的部分,它允许程序根据不同的条件执行不同的代码块,或者按照给定的循环结构重复执行代码块。 Python作为一种高级编程语言,其控制结构简洁易懂,非常适合初学者学习。在Python中,控制结构通常涉及以下概念: 1. 条件语句(Conditionals):允许程序基于不同的条件执行不同的动作。在Python中,这通常通过`if`、`elif`和`else`关键字来实现。 2. 循环语句(Loops):用于重复执行一个代码块,直到满足特定条件为止。Python提供了`for`循环和`while`循环来处理不同类型的循环逻辑。 3. 迭代器和生成器(Iterators and Generators):在Python中,迭代器是一种对象,它允许一个程序在数据集合上进行迭代操作,而生成器则是一种特殊的迭代器,用于按需产生值的函数。 4. 列表推导式(List Comprehensions):一种在Python中生成列表的简洁方式,可以通过单行代码表达循环和条件语句。 5. 函数(Functions):虽然函数不是控制结构,但它们是组织代码和执行特定任务的重要工具,在控制流程中经常会调用函数。 6. 异常处理(Exception Handling):允许程序处理错误情况,通过使用`try`、`except`、`finally`和`else`关键字来捕获并处理可能出现的异常情况。 在“第二控制tour_task”中,学习者可能需要通过实践掌握以上概念,并能应用于解决实际问题。例如,设计一个程序来模拟简单的交互式游戏,或者处理一组数据并根据特定条件输出结果。这个过程可能涉及编写多个函数,使用循环遍历数据集,以及利用条件语句处理游戏逻辑或数据分析中的决策点。 由于文件名称列表中包含了“master”,这表明提供的代码库是一个版本控制系统的主分支,可能是Git仓库的主分支。这意味着学习者可能需要使用版本控制系统(如Git和GitHub)来管理自己的代码提交和版本,这也是现代软件开发中的一个重要实践。 总结来说,“stepik_tours_pt_2:Stepik的第二控制tour_task”项目显然是一个面向Python初学者的编程练习,它聚焦于控制流的概念和实践,旨在帮助学习者巩固理解并能够熟练运用Python中的条件判断和循环等控制结构。通过完成这个tour_task,学习者应能够提升他们的编程能力,并为编写更复杂的程序打下坚实的基础。

class AbstractGreedyAndPrune(): def __init__(self, aoi: AoI, uavs_tours: dict, max_rounds: int, debug: bool = True): self.aoi = aoi self.max_rounds = max_rounds self.debug = debug self.graph = aoi.graph self.nnodes = self.aoi.n_targets self.uavs = list(uavs_tours.keys()) self.nuavs = len(self.uavs) self.uavs_tours = {i: uavs_tours[self.uavs[i]] for i in range(self.nuavs)} self.__check_depots() self.reachable_points = self.__reachable_points() def __pruning(self, mr_solution: MultiRoundSolution) -> MultiRoundSolution: return utility.pruning_multiroundsolution(mr_solution) def solution(self) -> MultiRoundSolution: mrs_builder = MultiRoundSolutionBuilder(self.aoi) for uav in self.uavs: mrs_builder.add_drone(uav) residual_ntours_to_assign = {i : self.max_rounds for i in range(self.nuavs)} tour_to_assign = self.max_rounds * self.nuavs visited_points = set() while not self.greedy_stop_condition(visited_points, tour_to_assign): itd_uav, ind_tour = self.local_optimal_choice(visited_points, residual_ntours_to_assign) residual_ntours_to_assign[itd_uav] -= 1 tour_to_assign -= 1 opt_tour = self.uavs_tours[itd_uav][ind_tour] visited_points |= set(opt_tour.targets_indexes) # update visited points mrs_builder.append_tour(self.uavs[itd_uav], opt_tour) return self.__pruning(mrs_builder.build()) class CumulativeGreedyCoverage(AbstractGreedyAndPrune): choice_dict = {} for ind_uav in range(self.nuavs): uav_residual_rounds = residual_ntours_to_assign[ind_uav] if uav_residual_rounds > 0: uav_tours = self.uavs_tours[ind_uav] for ind_tour in range(len(uav_tours)): tour = uav_tours[ind_tour] quality_tour = self.evaluate_tour(tour, uav_residual_rounds, visited_points) choice_dict[quality_tour] = (ind_uav, ind_tour) best_value = max(choice_dict, key=int) return choice_dict[best_value] def evaluate_tour(self, tour : Tour, round_count : int, visited_points : set): new_points = (set(tour.targets_indexes) - visited_points) return round_count * len(new_points) 如何改写上述程序,使其能返回所有已经探索过的目标点visited_points的数量,请用代码表示

2023-06-10 上传

input_tours_for_drones = 20 len_input_tours_for_drones = 7 aoi = utility.build_random_aoi(width_area, height_area, n_target, n_depots, hovering_time=5, seed=seed) depots = aoi.depots depot_first_drone = depots[0] tours_first_drone=[build_random_tour(aoi,depot_first_drone,np.random.randint(len_input_tours_for_drones - 5,len_input_tours_for_drones + 5)) for i in range(input_tours_for_drones)] depot_second_drone = depots[1] tours_second_drone=[build_random_tour(aoi,depot_second_drone,np.random.randint(len_input_tours_for_drones-5, len_input_tours_for_drones + 5)) for i in range(input_tours_for_drones)] uavs_to_tours = {drones[0]: tours_first_drone, drones[1]: tours_second_drone model = TotalCoverageModel(aoi, uavs_to_tours, max_rounds, debug=False) model.build() model.optimize() mrs = model.solution assert mrs is not None, "optimal solution not found" print("TC-OPT covers", mrs.coverage_score(), "targets using", mrs.max_rounds, "rounds") mrs.plot("TC-OPT") # for big istances (over 200/300 points) remove this plot mrs.plot_cumulative_coverage_for_round("TC-OPT") 以上为用Gurobi求解最优解问题,请解释以上程序: depot_first_drone = depots[0] tours_first_drone=[build_random_tour(aoi,depot_first_drone,np.random.randint(len_input_tours_for_drones - 5,len_input_tours_for_drones + 5)) for i in range(input_tours_for_drones)] depot_second_drone = depots[1] tours_second_drone=[build_random_tour(aoi,depot_second_drone,np.random.randint(len_input_tours_for_drones-5, len_input_tours_for_drones + 5)) for i in range(input_tours_for_drones)] uavs_to_tours = {drones[0]: tours_first_drone, drones[1]: tours_second_drone是什么意思

105 浏览量
2023-06-08 上传