一点感悟

   对于车辆路径问题,要求客户需求点的需求量不大于货车的载重量(这里不考虑体积因素)。当然超过了载重量就直接送货剩下部分参与配送,因此首先要将直送的部分去除。每个客户点的需求可能由许多票订单组成,很自然的想到这是0-1背包问题,一辆或多辆货车看作一个背包,一次性装的货物价值竟可能大,假设各货物的价值都为1,0-1背包问题的目标函数就是一次直送要完成竟可能多的订单。0-1背包问题通常有两种解法:分支定界法和动态规划法,动态规划法利用迭代过程适于编程,因此翻出运筹学书重新看了下动态规划,网上找了段Java代码,很轻松地就把问题解决了。例如货物中{1,3,5,7,9},车辆载重为12,最优解为{1,3,7},这里货物总重只有11,然而白白浪费了1个单位的运能。因此,我就思考需要修改0-1背包问题的目标函数,不再是完成竟可能多票订单,而是货车的运能利用率最高,貌似现在变成了一个一般的最优化问题,不再是0-1背包问题了。中午躺在床上就思考现在该怎么解,显然首先需要对货物需求排序,上例已有序了,排序以后首先需找是否有刚好满足载重12的方案(首先加入1,载重剩余11,在表内2分查找是否存在11,存在即停止,不存在再加入3,载重剩余8,2分查找是否存在8,依此类推),存在就找到最优解,不存在再考虑使用0-1背包问题解法。显然对于上面的例子,最优解是两辆车分别{3,9}和{5,7},运能都充分利用,最后剩1个单位重量货物加入配送。由此,我才忽然想到一个最简单的方法,也就是首先将所有的货物需求加权得25,25除以12取余数,余数为1,即1个单位货物参与车辆路径问题配送。其他24个单位直送,本例正好两个都是12。若分别为11和13怎么办?当然此时问题关键不再是11与13的问题了。而是实际情况,实际中经常一票货物拆做几次运送,也就是说一票货物有很多小包装,13拆成12+1不存在任何问题。此时,这个问题就很明了了,只要算出余数就可以了。一个很简单的问题结果被我想复杂了。

  记得以前看过的一个例子。肥皂厂经常会有小概率的肥皂盒没有装入肥皂,出厂前需要把空肥皂盒找出。一个国营肥皂厂老总让电子系博士去解决这个问题,博士花了几个月设计了一套一百多万元的设备成功的解决了问题;一个民营肥皂厂的老总丢给一个工人300块钱,粗暴的说:“明天你要不把问题解决了就滚回家,拜来上班”。第二天,工人花了100元不到买了个风扇,空盒子经过风扇就吹走了,有肥皂的盒子顺利进入下一环节,因此问题也解决了。

  有位西方古人说过书读多了就不聪明了。有时很怅惘,感觉高二以前的我很聪明,高二以后渐渐将自己思维程式化。如何创新,如何不致思维僵化,有很多需要思考的。


## 总结报告 ### 一、遇到的问题及解决方案 #### 1. **开发环境搭建** **问题:** 在项目初期,遇到了Qt Creator与MySQL数据库连接不稳定的问题,导致数据库操作失败和开发进度的拖延。具体表现为: - 数据库连接时常断开,提示“无法建立与主机的连接”。 - SQL查询结果返回为空,即便数据库中存在相应数据。 - 使用调试工具时,发现连接字符串配置错误,数据库用户名和密码未正确设置。 **解决方案:** - **配置检查:** - 仔细检查了 `.pro` 文件中的 MySQL 驱动配置,确保添加了 `QT += sql` 模块。 - 修改 `QSqlDatabase::addDatabase("QMYSQL")` 的连接字符串,确保数据库主机名、用户名和密码正确无误。 - 示例代码: ```cpp QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("127.0.0.1"); db.setDatabaseName("figure_mall"); db.setUserName("root"); db.setPassword("123456"); ``` - **代码调试:** - 使用 `qDebug()` 输出 SQL 执行日志,方便排查连接异常。 - 示例代码: ```cpp if (db.open()) { qDebug() << "数据库连接成功"; } else { qDebug() << "数据库连接失败:" << db.lastError().text(); } ``` - **工具辅助:** - 利用 Qt Creator 内置的数据库浏览器实时查看表结构与执行 SQL 语句。 - 通过数据库浏览器执行简单的查询语句,确保连接正常。 - 示例查询: ```sql SELECT * FROM dbt_user LIMIT 5; ``` **收获与感悟:** - **细致检查的重要性:** 从这次经历中学到了在遇到问题时,一定要耐心地逐步排查,尤其是配置文件中的每一项都可能成为问题的根源。 - **日志记录的价值:** 通过调试日志,能够快速定位并解决问题,以后在开发中应养成良好的日志记录习惯。 - **工具的利用:** 学会了充分利用IDE内置工具和其他辅助工具,可以大大提高开发效率,减少排查问题的时间。 #### 2. **多线程与高并发处理** **问题:** 在高并发场景下,特别是秒杀活动期间,出现了库存超卖的现象,严重影响了用户体验。具体表现: - 多个用户几乎同时提交订单时,库存数量未能及时更新,导致部分订单支付成功但库存不足。 - 数据库事务在高并发情况下出现死锁,影响整体性能。 **解决方案:** - **乐观锁机制:** - 采用乐观锁机制来防止超卖,确保订单支付成功后才会触发库存减少操作。 - 示例代码: ```cpp UPDATE dbt_goods SET dbv_quantity_stock = dbv_quantity_stock - 1, version = version + 1 WHERE dbv_id = 'g01' AND version = 5; ``` - **线程安全:** - 使用Qt的线程安全队列与互斥锁保护共享的库存计数器,防止多线程竞争带来的数据不一致问题。 - 示例代码: ```cpp QMutex mutex; QMutexLocker locker(&mutex); // 更新库存逻辑 ``` - **异步处理:** - 对于耗时较长的操作如图像压缩、数据库写入等,使用QtConcurrent::run以异步方式执行,避免阻塞主线程。 - 示例代码: ```cpp QtConcurrent::run([]() { // 图像压缩逻辑 }); ``` **收获与感悟:** - **并发控制的必要性:** 深刻体会到并发控制对于高并发系统的重要性,合理使用锁机制和异步处理可以有效提升系统的稳定性和性能。 - **事务处理的复杂性:** 在高并发环境下,事务处理的复杂度大大增加,需要更加谨慎地设计事务流程,确保数据一致性。 - **系统设计的前瞻性:** 设计系统时应充分考虑未来的扩展性和高并发需求,提前做好架构规划,避免后期进行大规模重构。 #### 3. **AI推荐算法优化** **问题:** 原始的推荐算法仅依靠离线计算,实时性较差,用户行为变化不能及时反映到推荐列表中。具体表现: - 用户浏览或收藏某款手办后,推荐列表没有及时更新。 - 推荐结果滞后,用户体验不佳。 **解决方案:** - **混合推荐策略:** - 采用协同过滤与内容推荐相结合的方法,既考虑用户历史行为又结合商品描述文本,提升推荐准确性和多样性。 - 示例代码: ```cpp user_vector = ALS_model.transform(user_id); content_vector = TFIDF.transform(goods_descriptions); hybrid_vector = 0.6 * user_vector + 0.4 * content_vector; ``` - **实时调整权重:** - 根据用户当前会话行为(如搜索关键词)动态调整推荐权重,使得推荐结果更贴合用户即时兴趣。 - 示例代码: ```cpp void adjust_weights(const QString& keyword) { // 调整推荐权重逻辑 } ``` - **离线+在线计算:** - 每日凌晨生成基础推荐列表,并在用户每次访问时进行微调,确保推荐结果既保持一定稳定性又具备实时响应能力。 - 示例代码: ```cpp void update_recommendations() { // 更新推荐列表逻辑 } ``` **收获与感悟:** - **推荐算法的多样性:** 掌握了多种推荐算法的实现方式,并了解了它们的优缺点,可以根据不同的业务场景灵活选择。 - **实时性的挑战:** 实时推荐系统的设计难度较大,需要在实时性和系统负载之间找到平衡点,以确保用户体验和系统性能。 - **数据的重要性:** 丰富的用户行为数据是推荐系统成功的关键,数据的质量和多样性直接影响推荐效果,因此要注重数据的采集和预处理。 ### 二、学习收获 #### 1. **Qt框架深入理解** 通过对Qt信号槽机制、多线程技术以及界面设计的学习,掌握了如何构建高效稳定的跨平台GUI应用程序,特别是在实时交互场景下的优化技巧。 #### 2. **数据库事务与锁机制** 深入了解了MySQL的事务处理机制和锁策略,学会了如何通过合理的事务设计和乐观锁来保证数据的一致性和完整性,这对于开发高并发系统至关重要。 #### 3. **推荐算法实践** 不仅理论学习了协同过滤和内容推荐算法原理,还在实践中实现了混合推荐系统,积累了大量关于用户行为分析和个性化推荐的经验,这对后续从事相关领域的工作非常有帮助。 #### 4. **团队协作与项目管理** 在整个开发过程中,与指导教师密切沟通,及时获取反馈意见;同时积极参与团队讨论,合理分工合作,培养了良好的团队协作能力和项目管理意识。 ### 三、未来展望 尽管目前系统已经基本满足设计目标,但仍有一些可以改进的地方,比如进一步优化推荐算法的实时性、增加物流信息查询功能等。未来将继续探索更多先进技术手段,不断完善该系统,使其更好地服务于潮流手办爱好者群体。 如果以上总结报告还有任何需要补充或修改的地方,请随时告诉我。 ### 四、总体感悟 通过此次项目开发,不仅在技术上有了显著提升,还在解决问题的过程中获得了许多宝贵的经验: - **持续学习的重要性:** 技术不断进步,必须保持学习的热情和动力,才能跟上行业的步伐。 - **实践出真知:** 理论知识固然重要,但只有在实际项目中应用这些知识,才能真正掌握其精髓。 - **团队力量的强大:** 在面对复杂的项目时,单打独斗往往难以胜任,团队协作的力量不容忽视。每个人都有自己的优势,通过合理分工和密切配合,可以实现更高的效率和更好的成果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值