补完 总结

本文通过Java代码展示了人物类(如Woman和Man)如何相互关联,实现家庭角色互动,包括婚姻、生育及职业行为。突出了面向对象编程和继承概念的应用。

people

package com.homework;

public class People {

}

Test

package com.homework;

public class Test {
	
	public static void main(String[] args) {
		
		Woman woman = new Woman();
		
		Man man = new Man();
		
		woman.setHusband(man);
		
		People people = woman.haveBaby();
		
		if(people == null) {
			
			System.out.println("先找个husband(老公)");
			return;
		}else {
			
			if(people instanceof Man) {
				
			Man boy = (Man)people;
			boy.work();
			}else if(people instanceof Woman) {
				Woman girl=(Woman)people;
				girl.housework();
			}
		}
		
	}

}

虽然不难  但是是突发考试常考的内容之一   后是银行管理   目前在学习JS  JQ     我很多时候都在水  事实上有用的代码都在其他PC上  总之目前应该会离开很长一段时间

<think>我们继续补完代码,主要是TaskScheduler类中的assign_task方法,以及run_simulation方法,同时增加对S4任务完成数的统计和输出。 注意:在之前的代码中,TaskScheduler的assign_task方法没有完全实现,我们将其补全,并确保在任务完成时更新S4任务计数器。 另外,在模拟循环中,我们不仅记录J1的位置,还需要在模拟结束后输出S4任务的最大完成数目。 以下是完整的assign_task方法: 由于之前已经给出了大部分代码,这里我们只补充assign_task方法中缺失的部分,并完善run_simulation方法以记录S4完成数。 但是,请注意:在之前的代码中,TaskScheduler的assign_task方法在计算动态持续时间后,需要设置任务的持续时间,然后计算available_time。这部分在之前的代码中已经存在,但为了完整性,我们保留。 此外,在run_simulation中,我们需要在模拟结束后输出最大S4完成数。 由于代码较长,我们只补充缺失的部分,并确保逻辑正确。 补充内容: 1. 在TaskScheduler类中,assign_task方法需要完整实现(之前已有部分代码,这里补充中断逻辑后的任务分配) 2. 在模拟循环中,每完成一个S4任务,更新completed_s4_tasks,并更新最大完成数(已经在update_ships_status中做了) 3. 在模拟结束后,输出最大S4完成数 注意:在之前的TaskScheduler类中,我们已经添加了max_s4_completed属性,并在每次完成S4任务时更新它。 下面我们将TaskScheduler类中的assign_task方法剩余部分补全,并确保模拟循环结束后输出S4最大完成数。 由于整个代码非常长,我们只补充关键部分: </think>我将继续补完代码,主要完成`TaskScheduler`类中的`assign_task`方法和`run_simulation`方法,并添加S4任务完成统计功能: ```python # 接上assign_task方法 def assign_task(self, task, ship): time_to_reach = ship.calculate_time_to_reach(task.position) start_time = self.current_time + time_to_reach # 获取响应时间限制(S4任务为24小时,补位任务为1小时) max_resp = max_response_time.get(task.task_type, 24) if task.task_type == "COVER_POINT": max_resp = 1.0 # 补位任务响应时间限制为1小时 # 检查响应时间是否满足要求 response_time = start_time - task.issue_time if response_time > max_resp: task.status = "failed" return False # 计算动态任务持续时间 task.duration = task.calculate_dynamic_duration(ship) if math.isinf(task.duration) or task.duration < 0: task.status = "failed" return False # 中断原有低优先级任务(若有) if ship.status == "executing" and ship.current_task: old_task = ship.current_task old_task.status = "interrupted" logging.info(f"舰船{ship.ship_id}中断任务{old_task.task_id},分配新任务{task.task_id}") # 分配新任务 ship.status = "executing" ship.current_task = task ship.available_time = start_time + task.duration task.status = "executing" task.assigned_ship = ship.ship_id task.start_time = start_time task.complete_time = ship.available_time # 记录S4任务开始时间(用于统计) if task.task_type == "S4": task.s4_start_time = start_time return True # -------------------------- 主模拟循环 -------------------------- def run_simulation(self, task_queue, max_simulation_time, j1_ship): """主模拟循环(输出J1坐标和S4完成统计)""" time_step = 0.01 # 仿真步长(小时) next_log_time = 0 # 下次记录坐标的时间点 j1_positions = [] # 存储J1舰艇坐标 # S4任务统计相关 s4_stats = { 'completed': 0, 'failed': 0, 'total': 0, 'avg_response': 0.0, 'max_response': 0.0, 'min_response': float('inf') } s4_task_details = [] # 存储S4任务详细信息 logging.info("开始模拟执行...") while self.current_time <= max_simulation_time: # 1. 处理当前时间到达的任务 while task_queue and task_queue[0].issue_time <= self.current_time: task = task_queue.popleft() self.process_task(task) # 记录S4任务总数 if task.task_type == "S4": s4_stats['total'] += 1 # 记录任务详细信息(无论是否成功) s4_task_details.append({ 'task_id': task.task_id, 'issue_time': task.issue_time, 'status': task.status, 'response_time': '-' }) logging.debug(f"处理任务 {task.task_id} ({task.task_type}) at {self.current_time:.2f}h") # 2. 更新舰船状态和周期检查 self.update_ships_status() self.check_cycle_completion() # 3. 记录J1坐标(每0.1小时一次) if self.current_time >= next_log_time: current_pos = j1_ship.current_pos j1_positions.append({ "时间(h)": round(next_log_time, 1), "X坐标": round(current_pos[0], 4), "Y坐标": round(current_pos[1], 4) }) next_log_time += 0.1 # 4. 推进时间 self.current_time += time_step # 5. 统计S4任务完成情况 self._calculate_s4_stats(s4_stats, s4_task_details) # 返回结果:J1位置和S4统计 return j1_positions, s4_stats, s4_task_details def _calculate_s4_stats(self, s4_stats, s4_task_details): """计算S4任务的统计指标""" total_response = 0.0 completed_count = 0 for task in s4_task_details: if task['status'] == 'completed': # 从任务实例获取响应时间 task_obj = next((t for t in self.completed_tasks if t.task_id == task['task_id']), None) if task_obj: response_time = task_obj.start_time - task_obj.issue_time task['response_time'] = round(response_time, 2) # 更新统计 total_response += response_time completed_count += 1 # 更新最小/最大响应时间 if response_time < s4_stats['min_response']: s4_stats['min_response'] = response_time if response_time > s4_stats['max_response']: s4_stats['max_response'] = response_time else: task['response_time'] = 'N/A' # 更新完成计数 s4_stats['completed'] = completed_count s4_stats['failed'] = s4_stats['total'] - completed_count # 计算平均响应时间 if completed_count > 0: s4_stats['avg_response'] = total_response / completed_count else: s4_stats['avg_response'] = 0.0 s4_stats['min_response'] = 0.0 s4_stats['max_response'] = 0.0 # 修改simulate_and_export_j1_positions函数以包含S4统计 def simulate_and_export_j1_positions(input_excel, output_file): """模拟执行并输出结果(包含J1坐标和S4统计)""" # ... [省略初始化代码,与之前相同] ... # 执行模拟(720小时) max_simulation_time = 720 j1_positions, s4_stats, s4_details = scheduler.run_simulation(task_queue, max_simulation_time, j1_ship) # 输出S4任务统计结果 logging.info("\n===== S4任务完成统计 =====") logging.info(f"总任务数: {s4_stats['total']}") logging.info(f"完成数: {s4_stats['completed']}") logging.info(f"失败数: {s4_stats['failed']}") logging.info(f"成功率: {s4_stats['completed']/s4_stats['total']*100:.2f}%") logging.info(f"平均响应时间: {s4_stats['avg_response']:.2f}小时") logging.info(f"最短响应时间: {s4_stats['min_response']:.2f}小时") logging.info(f"最长响应时间: {s4_stats['max_response']:.2f}小时") # 导出结果到Excel(两个sheet) try: with pd.ExcelWriter(output_file) as writer: # Sheet1: J1位置 if j1_positions: result_df = pd.DataFrame(j1_positions) result_df.to_excel(writer, sheet_name='J1位置', index=False) # Sheet2: S4任务详情 s4_df = pd.DataFrame(s4_details) s4_df.to_excel(writer, sheet_name='S4任务详情', index=False) # Sheet3: S4任务统计 stats_df = pd.DataFrame([{ '总任务数': s4_stats['total'], '完成数': s4_stats['completed'], '失败数': s4_stats['failed'], '成功率(%)': s4_stats['completed']/s4_stats['total']*100, '平均响应时间(小时)': s4_stats['avg_response'], '最短响应时间(小时)': s4_stats['min_response'], '最长响应时间(小时)': s4_stats['max_response'] }]) stats_df.to_excel(writer, sheet_name='S4统计', index=False) logging.info(f"成功导出结果到 {output_file}") except Exception as e: logging.error(f"导出Excel失败: {str(e)}") ``` ### 代码说明: 1. **assign_task方法完善**: - 添加了响应时间计算和验证逻辑 - 记录S4任务的开始时间用于后续响应时间统计 - 处理任务中断时的状态更新 2. **run_simulation方法改进**: - 添加S4任务统计数据结构 - 在任务处理过程中收集S4任务信息 - 模拟结束后调用`_calculate_s4_stats`计算统计数据 3. **S4统计计算**: - 计算完成率、失败率 - 分析最小/最大/平均响应时间 - 收集每个S4任务的详细信息 4. **结果导出**: - 创建多sheet的Excel文件: - Sheet1:J1位置数据(时间序列) - Sheet2:S4任务详情(任务ID、发布时间、状态、响应时间) - Sheet3:S4任务统计概览(完成率、响应时间等) 5. **日志输出**: - 在模拟结束后输出S4任务的详细统计信息 - 包含成功率、响应时间等关键指标 ### S4任务优化策略总结: 1. **优先级调整**:S4从优先级1提升到1.5,高于补位任务 2. **抢占机制**:允许S4任务中断正在执行的补位任务 3. **响应时间监控**:实时记录每个S4任务的响应时间 4. **推迟补位任务**:从周期结束前1小时推迟到前0.5小时才生成 5. **资源分配优化**:空闲舰船优先分配给S4任务 这些优化措施协同工作,可以在保证固定点覆盖的前提下,最大化S4任务的完成数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值