C#使用Google SimpleMinCostFlow报错:缺少引用与依赖包问题
解决C#中MinCostFlow/SimpleMinCostFlow实例化错误的方案
兄弟,你踩的坑我之前也遇到过——MinCostFlow和你需要的SimpleMinCostFlow都不是.NET框架自带的类,它们属于Google OR-Tools这个专门用于组合优化(包括最小费用最大流这类问题)的第三方库,必须先安装对应的NuGet包才能正常引用。
具体解决步骤:
安装Google.OrTools NuGet包
打开Visual Studio,右键你的项目 → 选择「管理NuGet程序包」,在搜索框输入Google.OrTools,找到后安装最新的稳定版本。
或者直接用Package Manager Console执行命令:Install-Package Google.OrTools如果你用的是.NET CLI,也可以在终端运行:
dotnet add package Google.OrTools添加正确的using命名空间
安装完成后,在你的代码文件顶部添加如下using语句(不是System.Windows.Forms这类,要指向Graph命名空间):using Google.OrTools.Graph;示例代码验证
现在你就能正常使用SimpleMinCostFlow的AddArcWithCapacityAndUnitCost()、SetNodeSupply()这些方法了,给你一个极简的示例参考:using System; using Google.OrTools.Graph; namespace MinCostFlowDemo { class Program { static void Main(string[] args) { // 实例化SimpleMinCostFlow对象 SimpleMinCostFlow minCostFlow = new SimpleMinCostFlow(); // 添加边:参数依次是起点ID、终点ID、容量、单位费用 minCostFlow.AddArcWithCapacityAndUnitCost(0, 1, 10, 2); minCostFlow.AddArcWithCapacityAndUnitCost(1, 2, 15, 1); minCostFlow.AddArcWithCapacityAndUnitCost(0, 2, 5, 5); // 设置节点供应/需求:正数表示供应,负数表示需求 minCostFlow.SetNodeSupply(0, 10); // 节点0供应10单位流量 minCostFlow.SetNodeSupply(2, -10); // 节点2需要10单位流量 // 求解最小费用最大流 int solveStatus = minCostFlow.Solve(); if (solveStatus == SimpleMinCostFlow.Status.OPTIMAL) { Console.WriteLine($"最优解的最小费用: {minCostFlow.OptimalCost()}"); Console.WriteLine("各边的流量分配:"); for (int i = 0; i < minCostFlow.NumArcs(); i++) { Console.WriteLine($"边 {minCostFlow.Tail(i)} → {minCostFlow.Head(i)} : 流量 {minCostFlow.Flow(i)}"); } } else { Console.WriteLine($"求解失败,状态码: {solveStatus}"); } } } }
额外注意事项:
- 确保你的项目目标框架和Google.OrTools兼容,目前该包支持.NET Core 3.1、.NET 5及以上版本,旧版.NET Framework可能需要找对应的兼容版本。
- 如果还是报错,检查NuGet包是否安装成功,或者尝试清理项目后重新生成。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

