首页 > 其他分享 >线性规划-JobShopSchedulingLP

线性规划-JobShopSchedulingLP

时间:2024-11-11 14:43:53浏览次数:1  
标签:MakeIntVar Console Solver 线性规划 solver WriteLine objective JobShopSchedulingLP

using System;
using Google.OrTools.LinearSolver;

namespace JobShopScheduingProblem
{

    /// <summary>
    /// 线性规划(Linear Programming)
    /// </summary>
    public class JobShopSchedulingLP
    {
        public static void Solve()
        {
            //Console.WriteLine("Google.OrTools version: " + Solver.Version());

            // 创建求解器实例,使用默认的求解器
            Solver solver = Solver.CreateSolver("GLOP");
            // 检查求解器是否有效
            if (solver == null)
            {
                Console.WriteLine("Unable to create solver.");
                return;
            }
            // 定义决策变量
            // 假设我们有两个作业,每个作业有两个任务,分别在两台机器上执行
            Variable job1Task1 = solver.MakeIntVar(0, 10, "job1_task1");
            Variable job1Task2 = solver.MakeIntVar(0, 10, "job1_task2");
            Variable job2Task1 = solver.MakeIntVar(0, 10, "job2_task1");
            Variable job2Task2 = solver.MakeIntVar(0, 10, "job2_task2");

            // 定义约束条件
            // 任务1必须在任务2之前完成
            solver.Add(job1Task1 + 2 <= job1Task2); // 假设任务1需要2个时间单位
            solver.Add(job2Task1 + 3 <= job2Task2); // 假设任务1需要3个时间单位

            // 机器不能同时处理两个任务
            solver.Add(job1Task1 + job2Task1 >= 1); // 假设机器1在同一时间只能处理一个任务
            solver.Add(job1Task2 + job2Task2 >= 1); // 假设机器2在同一时间只能处理一个任务

            // 定义目标函数:最小化最大完成时间
            Objective objective = solver.Objective();
            objective.SetMinimization();
            objective.SetCoefficient(job1Task2, 1); // 假设我们希望最小化第一个作业的完成时间
            objective.SetCoefficient(job2Task2, 1); // 假设我们希望最小化第二个作业的完成时间

            // 求解问题
            Solver.ResultStatus resultStatus = solver.Solve();

            // 输出结果
            if (resultStatus == Solver.ResultStatus.OPTIMAL)
            {
                Console.WriteLine("Optimal solution found:");
                Console.WriteLine("Job 1 Task 1 starts at: " + job1Task1.SolutionValue());
                Console.WriteLine("Job 1 Task 2 starts at: " + job1Task2.SolutionValue());
                Console.WriteLine("Job 2 Task 1 starts at: " + job2Task1.SolutionValue());
                Console.WriteLine("Job 2 Task 2 starts at: " + job2Task2.SolutionValue());
                Console.WriteLine("Minimum makespan: " + objective.Value());
            }
            else
            {
                Console.WriteLine("The problem does not have an optimal solution!");
            }
        }
    }
}

 

标签:MakeIntVar,Console,Solver,线性规划,solver,WriteLine,objective,JobShopSchedulingLP
From: https://www.cnblogs.com/ljg3020/p/18538695

相关文章

  • 数学建模,非线性规划lingo例题
    题目:家具制造厂板材优化问题(具体化)背景:一家家具制造厂生产两种类型的家具:办公桌和办公椅。工厂有两种不同规格的板材可供使用,每种板材的成本和利用率不同。工厂的目标是在有限的板材资源和生产时间内,最大化利润,同时考虑板材的余料损失。决策变量:x1x1​:生产的办公桌数量x2x2......
  • 线性规划求解软件开发的PSP数据统计
    PSP报告1.计划(Planning)估算:本项目的主要目标是实现线性规划问题的优化模型,并通过GUI界面简化用户操作。根据任务复杂度,估算开发工作量约为40小时。2.开发(Development)2.1需求分析(Analysis)在项目中,需求包括以下几点:通过C++实现线性规划问题的优化模型。......
  • 【旧文重发】MATLAB 通过函数封装一劳永逸地解决线性规划与运输问题的linprog的标准化
    这篇随笔原本是我上实验课时候的笔记,2023年7月曾经在CSDN平台上发布过。今天恰好有朋友跟我问起MATLAB自带的求解器输入很不直观的问题,我打开这个文章发给他的时候发现自己一年前写的LaTeX公式依托答辩,所以重打了一遍。再加上由于CSDN平台的持续摆烂,终于是用不下去......
  • 5.5求非凸函数的线性规划问题
    importnumpyasnpfromscipy.optimizeimportminimizedefobjective(x):return2*x[0]+3*x[0]**2+3*x[1]+x[1]**2+x[2]defconstraint1(x):return10-(x[0]+2*x[0]**2+x[1]+2*x[1]**2+x[2])defconstraint2(x):......
  • 5.4求解非凸非线性规划
    importnumpyasnpfromscipy.optimizeimportminimize#定义目标函数defobjective(x):return-np.sum(np.sqrt(x))#注意:scipy的minimize默认是最小化问题,所以这里取负号#定义约束条件constraints=[{'type':'ineq','fun':lambdax:10-x[0]}......
  • 非线性规划
    什么是非线性规划非线性规划,指约束条件中有非线性约束。非线性约束,即约束的不等式中含有高次幂项,如\(x_1^2+x_2^2\leq1\)就是一个非线性约束。matlab标准型,只能求解最小值问题,且约束条件要是小于等于的不等式matlab函数求解非线性规划[x,value]=fmincon(@f,x0,A,b,......
  • 非线性规划之飞行管理问题
    题目:在约10000m高空的某边长160km的正方形区域内,经常有若干架飞机作水平飞行。区域内每架飞机的位置和速度向量均由计算机记录其数据,以便进行飞行管理。当一架欲进入该区域的飞机到达区域边缘时,记录其数据后,要立即计算并判断是否会与区域内的飞机发生碰撞。如果会碰撞,则应计算如......
  • 用Python实现运筹学——Day 9: 线性规划的灵敏度分析
    一、学习内容1.灵敏度分析的定义与作用灵敏度分析(SensitivityAnalysis)是在优化问题中,分析模型参数变化对最优解及目标函数值的影响。它帮助我们了解在线性规划模型中,当某些参数(如资源供应量、成本系数等)发生变化时,最优解是否会发生变化,以及这种变化的幅度。灵敏度分析的......
  • 用Python实现运筹学——Day 10: 线性规划的计算机求解
    一、学习内容1.使用Python的scipy.optimize.linprog进行线性规划求解scipy.optimize.linprog是Python中用于求解线性规划问题的函数。它实现了单纯形法、内点法等算法,能够处理求解最大化或最小化问题,同时满足线性约束条件。线性规划问题的形式:线性规划问题可以描......
  • 网络流与线性规划24题详解(上)
    前言题单刷24题刷魔怔了,写个详解。难度不断递增,T1-T9为蓝题,T10-T23为紫题。(什么?你问我为什么没有T24?)好了,让我们开始吧!T1孤岛营救问题思路:这题数据小,所以用BFS\(key[x][y][k]\)记录\((x,y)\)的第k把钥匙\(wall[x1][y1][x2][y2]\)记录墙和门\(vis[x1][y1][k]\)记录是否走......