【Deep Seek本地化部署】模型实测:规划求解python代码

news/2025/2/4 16:05:44 标签: python, 开发语言, 人工智能, Deep Seek

目录

前言

一、实测

1、整数规划问题

2、非线性规划问题

二、代码正确性验证

1、整数规划问题代码验证

2、非线性规划问题代码验证

三、结果正确性验证

1、整数规划问题结果正确性验证

2、非线性规划问题正确性验证

四、整数规划问题示例

后记


前言

模型:使用ollama部署的deepseek-r1:14b。

一、实测

直接问:规划求解python代码

回答:它给出了两份代码,一个适用于整数规划问题,一个适用于非线性规划。

1、整数规划问题

python">from pulp import *

# 创建问题
prob = LpProblem('example', LpMaximize)

# 定义变量
x1 = LpVariable('x1', 0, None, Integer)
x2 = LpVariable('x2', 0, None, Integer)

# 定义目标函数
prob += 3 * x1 + 2 * x2

# 定义约束条件
prob += x1 + x2 <= 4
prob += 2 * x1 + x2 <= 6

# 求解问题
prob.solve()

# 输出结果
print("状态:", prob.status)
print(f"x1 = {x1.value}")
print(f"x2 = {x2.value}")
print(f"目标函数值 = {value(prob.objective)}")

2、非线性规划问题

python">from scipy.optimize import minimize

# 目标函数
def objective(x):
    return x[0]**2 + x[1]**2

# 约束条件
constraints = [
    {'type': 'ineq', 'fun': lambda x: 4 - (x[0] + x[1])},  # x1 + x2 <= 4
    {'type': 'ineq', 'fun': lambda x: 6 - (2*x[0] + x[1])}   # 2x1 + x2 <= 6
]

# 初始猜测值
x0 = [0, 0]

# 使用SLSQP方法求解
result = minimize(objective, x0, method='SLSQP', constraints=constraints)

if result.success:
    print("结果:")
    print(f"x1 = {result.x[0]:.2f}")
    print(f"x2 = {result.x[1]:.2f}")
    print(f"目标函数值 = {result.fun}")
else:
    print("无解或问题未定义。")

二、代码正确性验证

1、整数规划问题代码验证

直接报错……

问题:LpVariable方法的第四个参数有问题。

python"># 定义变量
x1 = LpVariable('x1', 0, None, Integer)
x2 = LpVariable('x2', 0, None, Integer)

改为:

python"># 定义变量
x1 = LpVariable('x1', 0, None, "Integer")
x2 = LpVariable('x2', 0, None, "Integer")

或者改为这个也行:

python"># 定义变量
x1 = LpVariable('x1', 0, None, LpInteger)
x2 = LpVariable('x2', 0, None, LpInteger)

修改完就正常运行了。

2、非线性规划问题代码验证

第二份代码就正常运行了。

三、结果正确性验证

1、整数规划问题结果正确性验证

显然,一眼就看出来了,它结果有问题,x1和x2应为具体的数值。

问题:

python">print(f"x1 = {x1.value}")
print(f"x2 = {x2.value}")

在源码中找到一个比较可疑的变量名,试试看。

修改:

python">print(f"x1 = {x1.varValue}")
print(f"x2 = {x2.varValue}")

结果:

那么这个结果是否正确呢?还需进一步验证

问题转换:

设:x = x1,y = x2(为方便查看)

限制条件:

① x ≥ 0,且为整数

② y ≥ 0,且为整数

③ x + y ≤ 4

④ 2x + y ≤ 6

求:当x和y取何值时,3x + 2y取最大值(创建问题时使用的是LpMaximize,即求最大值)

解:直接上图

正确答案为:x = 2,y = 2,目标函数最大值为10。

结果正确。

2、非线性规划问题正确性验证

问题转换:

设:x = x1,y = x2(为方便查看)

限制条件:

① x ≥ 0(因初始猜测值的是x0 = [0, 0])

② y ≥ 0(因初始猜测值的是x0 = [0, 0])

③ x + y ≤ 4

④ 2x + y ≤ 6

求:当x和y取何值时,x² + y²取最小值(使用的是SciPy库中的optimize中的minimize)

解:直接上图

根据条件可知,x和y的取值范围在四边形ABCD的范围内,很容易得出当x = 0,y = 0时,x² + y²的最小值为0。

结果正确。

四、整数规划问题示例

python">from pulp import *
'''
物品A 6.85元/个
物品B 5.28元/个
物品C 2.3元/个
总价=90.56元
求A、B、C分别买了几个
'''

arr = [6.85, 5.28, 2.3]
total = 90.56

# 创建问题实例
prob = LpProblem("example", LpMaximize)

# 定义决策变量(整数)
n = len(arr)
variables = [LpVariable(f'x{i+1}', 0, None, LpInteger) for i in range(n)]

# 定义约束条件
prob += lpSum([arr[i] * variables[i] for i in range(n)]) == total

# 求解问题
prob.solve()

# 输出结果
print("Status:", prob.status)
for i in range(n):
    print(f"x{i+1} = {variables[i].value()}")

'''
结果
Status: 1
x1 = 10.0
x2 = 2.0
x3 = 5.0
'''
python">from pulp import *
'''
假设有三种产品,每种产品的单位利润分别为 [3, 5, 4] 元,
而生产每个产品需要消耗的资源为 [2, 4, 3] 单位,
总共有 100 单位的资源可用。
目标是确定每种产品的生产数量,以使总利润最大化。
'''

# 输入数据
profits = [3, 5, 4]    # 利润数组
resource_usage = [2, 4, 3]  # 资源消耗数组
total_resource = 100     # 总资源可用量

# 创建问题实例
prob = LpProblem("Maximize_Profits", LpMaximize)

# 定义决策变量(整数)
n = len(profits)
variables = [LpVariable(f'x{i+1}', 0, None, LpInteger) for i in range(n)]

# 定义目标函数:最大化总利润
prob += lpSum([profits[i] * variables[i] for i in range(n)]), "Maximize Profits"

# 添加约束条件:资源限制
prob += lpSum([resource_usage[i] * variables[i] for i in range(n)]) <= total_resource, "Total Resource Constraint"

# 求解问题
prob.solve()

# 输出结果
print("Status:", prob.status)
for i in range(n):
    print(f"x{i+1} = {variables[i].value()}")
print("Maximized Profit =", value(prob.objective))

'''
结果:
Status: 1
x1 = 50.0
x2 = 0.0
x3 = 0.0
Maximized Profit = 150.0
'''

后记

后面又测试了几次,有时候它给出的代码可以直接运行,有时候又有问题


http://www.niftyadmin.cn/n/5841660.html

相关文章

LeetCode - #197 Swift 实现找出温度更高的日期

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

[ Spring ] Spring Boot Mybatis++ 2025

文章目录 StructureMyBatis Controller AbilitiesConfigure Plugins and RepositoriesApply Plugins and Add DependenciesMyBatis Spring PropertiesMyBatis ApplicationMyBatis BeansMyBatis MapperMyBatis Query Builder Structure this blog introduce 3 ways using mybat…

本地部署运行一下deepseek r1尝鲜

2025-01-20正式发布 DeepSeek-R1&#xff0c;并同步开源模型权重。 DeepSeek-R1 遵循 MIT License&#xff0c;允许用户通过蒸馏技术借助 R1 训练其他模型。 DeepSeek-R1 上线API&#xff0c;对用户开放思维链输出&#xff0c;通过设置 modeldeepseek-reasoner 即可调用。 Dee…

第五章:元婴-React用户功能实战

文章目录 登录页面布局JWT 令牌鉴权用户功能实现用户查询页面用户更改状态用户添加页面用户添加页面表单构建用户编辑页面用户编辑表单页面登录页面布局 import React, { useEffect, useState } from react import { Button, Form, Input, message } from antd import style fr…

使用 Grafana 和 Prometheus展现消息队列性能

引言 上篇文章通过JMX提取Kafka数据&#xff0c;本篇文章将通过JDBC存储Kafka性能数据存储于数据库&#xff0c;并通过Grafana 和 Prometheus进行展示&#xff0c;实现开发中常用的可视化监控 1. 环境准备 Kafka&#xff1a;运行中的 Kafka 集群&#xff0c;确保可以…

【Word快速设置论文公式居中编号右对齐】

1. 查看纸张大小 布局 —> 纸张大小 —> 21厘米*29.7厘米 —> 得到宽度为21厘米 2. 查看左右的页边距 布局 —> 页边距 —> 1.57厘米和1.57厘米 3. 计算距离 公式的距离&#xff1a;&#xff08;21-1.57-1.57&#xff09;/2 8.93厘米 编号靠右的距离&…

【教程】微信扫描二维码进入小程序指定页面并携带参数

功能描述 打开微信扫一扫&#xff0c;扫描产品上的二维码&#xff0c;弹出小程序&#xff0c;跳到“邀请用户”页面。解析二维码中的参数&#xff0c;自动填充到页面中的“邀请码”输入框。 操作步骤 首先&#xff0c;要到微信公众平台对扫普通链接二维码打开小程序功能进行配…

MATLAB | 基于长时间序列栅格数据的Mann-Kendall与Pettitt突变检验分析

各位同学好&#xff0c;今天我们将分享在水文气象等领域中常用的两种突变检验方法——Mann-Kendall&#xff08;MK&#xff09;检验和Pettitt检验。由于时间关系&#xff0c;今天我们不详细介绍具体的公式和推导过程&#xff0c;感兴趣的同学可以参考相关文献&#xff0c;如《P…