自绘用于调整大小的“粒状”(grippie)

本文介绍如何在VS2008中实现状态栏上的Grippie功能,通过GDI和GDI+两种方式展示了具体的绘制过程。

VS2008在非最大化时的状态栏上会有一个用于调整大小的“粒状”(grippie),我们自己的自绘窗口经常也需要这么一个东西,本文说的就是这个东西的实现。

 

图1:vs2008的grippie

vs2008的grippie


图2:vs2008的grippie放大后的样子

vs2008 grippie放大


图3:我的实现效果

我的实现效果

 

实现其实很简单,截个图,放大,原来就是画些点,具体还是贴代码吧:)

gdi和gdi+的代码其实没有本质的区别,我刚好都试了下,就顺便都贴出来和大家分享。

先看gdi的

 

再看gdi+的

 

-- theEnd --

粒状禁忌搜索算法是禁忌搜索算法的一种改进和拓展形式。 ### 算法基本原理 禁忌搜索算法是一种全局性邻域搜索算法,它通过引入一个禁忌表来避免搜索过程中的循环和局部最优解。而粒状禁忌搜索算法在其基础上,将搜索过程中的邻域结构进行了粒状化处理。它把多个邻域移动组合成一个“粒”,以更大的搜索步长在解空间中进行搜索,这样可以加快搜索速度,减少陷入局部最优的可能性。 ### 算法特点 - **高效性**:通过粒状化邻域,减少了不必要的小步长搜索,能够在更短的时间内探索更广泛的解空间,提高了搜索效率。 - **避免局部最优**:以较大的搜索步长进行搜索,有助于跳出局部最优解,从而更有可能找到全局最优解。 ### 算法流程 1. **初始化**:设定初始解、禁忌表的长度、粒的大小等参数。 2. **生成粒状邻域**:将多个邻域移动组合成粒,形成粒状邻域。 3. **选择移动**:从粒状邻域中选择一个合适的移动,更新当前解。 4. **更新禁忌表**:将选择的移动加入禁忌表,同时根据禁忌表长度的限制,移除最早加入的移动。 5. **终止条件判断**:判断是否满足终止条件,如达到最大迭代次数、找到满意解等。如果不满足,则返回步骤2继续搜索。 ### 代码示例(Python 伪代码) ```python # 初始化参数 initial_solution = ... tabu_list_length = ... granule_size = ... max_iterations = ... current_solution = initial_solution tabu_list = [] iteration = 0 while iteration < max_iterations: # 生成粒状邻域 granular_neighborhood = generate_granular_neighborhood(current_solution, granule_size) best_move = None best_solution = None best_value = float('-inf') # 选择最佳移动 for move in granular_neighborhood: new_solution = apply_move(current_solution, move) value = evaluate_solution(new_solution) if move not in tabu_list and value > best_value: best_move = move best_solution = new_solution best_value = value # 更新当前解和禁忌表 current_solution = best_solution tabu_list.append(best_move) if len(tabu_list) > tabu_list_length: tabu_list.pop(0) iteration += 1 # 返回最终解 final_solution = current_solution ``` ### 应用场景 粒状禁忌搜索算法在组合优化问题中有着广泛的应用,如旅行商问题(TSP)、车辆路径规划问题(VRP)、调度问题等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值