24、CloudSim 示例与云平台实验指南

CloudSim 示例与云平台实验指南

1. CloudSim 示例

1.1 CloudSim 示例 7:容器模拟的初始示例

1.1.1 算法说明

该示例展示了如何使用 CloudSim 进行容器模拟。其输入为多个虚拟机(VM)的 ID、VM 大小和处理元素(PE)配置,输出为云任务(Cloudlet)列表。具体步骤如下:
1. 初始化 CloudSim 包 :在创建任何实体之前调用此操作。
2. 定义容器分配策略 :确定容器如何分配到数据中心的虚拟机。
3. 定义 VM 选择策略 :当主机被识别为过载时,确定哪些虚拟机应被选择进行迁移。
4. 定义主机选择策略 :确定哪些主机应被选为迁移目标。
5. 定义选择未充分利用和过度利用主机的阈值 。
6. 创建主机列表 :考虑主机数量和主机类型。
7. 定义 VM 到容器的分配策略 。
8. 定义容器分配到 VM 的超额预订因子 :代理使用此因子创建云任务、容器和 VM 列表以提交给代理。
9. 分配日志地址 :用于记录数据中心中 VM 和容器的统计信息。
10. 提交列表 :将云任务、容器和 VM 列表提交给代理。
11. 确定模拟终止时间 :根据云任务的工作量。
12. 创建实验特定名称 :用于创建日志地址文件夹。
13. 打印云任务对象 。
14. 创建虚拟机并添加到列表 。
15. 创建主机列表 :考虑规格。
16. 创建数据中心 。
17. 创建容器 :用于托管云任务并将它们绑定在一起。
18. 创建云任务列表 :将在容器上运行。
19. 打印模拟结果 :当模拟完成时。

1.1.2 源代码
public class CloudSimExample7
{
    private static List<Cloudlet> CloudletList;
    private static List<Vm> vmlist;
    public static void main(String[] args)
    {
        Log.printLine("Starting CloudSimExample7...");
        try {
            /* First step: Initialize the CloudSim package. It should be called before creating any entities. */
            int num_user = 1; // number of Cloud users
            Calendar calendar = Calendar.getInstance();
            boolean trace_flag = false; // trace events
            CloudSim.init(num_user, calendar, trace_flag);
            /* Defining the container allocation Policy. This policy determines how Containers are allocated to VMs in the data center. */
            ContainerAllocationPolicy containerAllocationPolicy = new PowerContainerAllocationPolicySimple();
            /* Defining the VM selection Policy. This policy determines which VMs should be selected for migration when a host is identified as over-loaded.*/
            PowerContainerVmSelectionPolicy vmSelectionPolicy = new PowerContainerVmSelectionPolicyMaximumUsage();
            /* Defining the host selection Policy. This policy determines which hosts should be selected as migration destination */
            HostSelectionPolicy hostSelectionPolicy = new HostSelectionPolicyFirstFit();
            /**
             * Defining the thresholds for selecting the under-utilized and over-utilized hosts.
             */
            double overUtilizationThreshold = 0.80;
            double underUtilizationThreshold = 0.70;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /** Prints the Cloudlet objects */
    private static void printCloudletList(List<Cloudlet> list) {
        int size = list.size();
        Cloudlet cloudlet;
        Log.printLine("========== OUTPUT ==========");
        Log.printLine("Cloudlet ID" + "STATUS" + "Data center ID" + "VM ID" + "Time" + "Start Time" + "Finish Time");
        for (int i = 0; i < size; i++) {
            cloudlet = list.get(i);
            Log.print("" + cloudlet.getCloudletId());
            if (cloudlet.getCloudletStatus() == Cloudlet.SUCCESS) {
                Log.print("SUCCESS");
            }
            Log.printLine(cloudlet.getResourceId() + cloudlet.getVmId() + (cloudlet.getActualCPUTime()) + cloudlet.getExecStartTime() + " " + (cloudlet.getFinishTime()));
        }
    }
}
1.1.3 输出示例
Cloudlet ID STATUS Data Center ID VM ID Time Start Time Finish Time
4 SUCCESS 2 4 3 0.2 3.2
30 SUCCESS 3 6 3 0.2 3
38 SUCCESS 2 2 4 0.2 4.2
39 SUCCESS 2 3 4 0.2 4.2

1.2 CloudSim 示例 8:使用全局管理器实体在运行时创建模拟实体

1.2.1 算法说明

该示例展示了如何使用全局管理器实体(GlobalBroker)在运行时创建模拟实体(如数据中心代理)。其输入和输出与示例 7 相同,具体步骤也与示例 7 类似。

1.2.2 源代码
public class CloudSimExample8
{
    /** The Cloudlet list. */
    private static List<Cloudlet> CloudletList;
    /** The vmList. */
    private static List<Vm> vmList;

    private static List<Vm> createVM(int userId, int vms, int idShift) {
        LinkedList<Vm> list = new LinkedList<Vm>();
        //VM Parameters
        long size = 10000; //image size (MB)
        int ram = 512; //vm memory (MB)
        int mips = 250;
        long bw = 1000;
        int pesNumber = 1; //number of cpus
        String vmm = "Xen"; //VMM name
        //create VMs
        Vm[] vm = new Vm[vms];
        for(int i=0;i< vms;i++) {
            vm[i] = new Vm(idShift + i, userId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared());
            list.add(vm[i]);
        }
        return list;
    }

    private static List<Cloudlet> createCloudlet(int userId, int cloudlets, int idShift) {
        LinkedList<Cloudlet> list = new LinkedList<Cloudlet>();
        //Cloudlet parameters
        long length = 40000;
        long fileSize = 300;
        long outputSize = 300;
        int pesNumber = 1;
        UtilizationModel utilizationModel = new UtilizationModelFull();
        Cloudlet[] cloudlet = new Cloudlet[cloudlets];
        for(int i=0;i<cloudlets;i++) {
            cloudlet[i] = new Cloudlet(idShift + i, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
            cloudlet[i].setUserId(userId);
            list.add(cloudlet[i]);
        }
        return list;
    }

    public static void main(String[] args) {
        Log.printLine("Starting CloudSimExample8...");
        try {
            int num_user = 2; // number of grid users
            Calendar calendar = Calendar.getInstance();
            boolean trace_flag = false; // mean trace events
            CloudSim.init(num_user, calendar, trace_flag);
            GlobalBroker globalBroker = new GlobalBroker("GlobalBroker");
            Datacenter datacenter0 = createDatacenter("Datacenter 0");
            Datacenter datacenter1 = createDatacenter("Datacenter 1");
            DatacenterBroker broker = createBroker("Broker 0");
            int brokerId = broker.getId();
            vmList = createVM(brokerId, 5, 0); //creating 5 vms
            CloudletList = createCloudlet(brokerId, 10, 0); // creating 10 Cloudlets
            broker.submitVmList(vmList);
            broker.submitCloudletList(CloudletList);
            // Fifth step: Starts the simulation
            CloudSim.startSimulation();
            // Final step: Print results when simulation is over
            List<Cloudlet> newList = broker.getCloudletReceivedList();
            newList.addAll(globalBroker.getBroker().getCloudletReceivedList());
            CloudSim.stopSimulation();
            printCloudletList(newList);
            Log.printLine("CloudSimExample8 finished!");
        } catch (Exception e) {
            e.printStackTrace();
            Log.printLine("The simulation has been terminated due to an unexpected error");
        }
    }

    private static Datacenter createDatacenter(String name) {
        // Here are the steps needed to create a PowerDatacenter:
        // 1. We need to create a list to store one or more Machines
        List<Host> hostList = new ArrayList<Host>();
        // 2. A Machine contains one or more PEs or CPUs/Cores. Therefore, should create a list to store these PEs before creating a Machine.
        List<Pe> peList1 = new ArrayList<Pe>();
        int mips = 1000;
        peList1.add(new Pe(0, new PeProvisionerSimple(mips))); // need to store Pe id and MIPS Rating
        peList1.add(new Pe(1, new PeProvisionerSimple(mips)));
        peList1.add(new Pe(2, new PeProvisionerSimple(mips)));
        peList1.add(new Pe(3, new PeProvisionerSimple(mips)));
        //Another list, for a dual-core machine
        List<Pe> peList2 = new ArrayList<Pe>();
        peList2.add(new Pe(0, new PeProvisionerSimple(mips)));
        peList2.add(new Pe(1, new PeProvisionerSimple(mips)));
        //4. Create Hosts with its id and list of PEs and add them to the list of machines
        int hostId=0;
        int ram = 16384; //host memory (MB)
        long storage = 1000000; //host storage
        int bw = 10000;
        hostList.add(
            new Host(
                hostId,
                new RamProvisionerSimple(ram),
                new BwProvisionerSimple(bw),
                storage,
                peList1,
                new VmSchedulerTimeShared(peList1)
            )
        ); // This is our first machine
        hostId++;
        hostList.add(
            new Host(
                hostId,
                new RamProvisionerSimple(ram),
                new BwProvisionerSimple(bw),
                storage,
                peList2,
                new VmSchedulerTimeShared(peList2)
            )
        ); // Second machine
        // 5. Create a DatacenterCharacteristics object that stores the properties of a data center: architecture, OS, list of Machines, allocation policy: time or space-shared, time zone and its price (G$/Pe time unit).
        String arch = "x86"; // system architecture
        String os = "Linux"; // operating system
        String vmm = "Xen";
        double time_zone = 10.0; // time zone this resource located
        double cost = 3.0; // the cost of using processing in this resource
        double costPerMem = 0.05; // the cost of using memory in this resource
        double costPerStorage = 0.1; // the cost of using storage in this resource
        double costPerBw = 0.1; // the cost of using bw in this resource
        LinkedList<Storage> storageList = new LinkedList<Storage>(); //we are not adding SAN devices by now
        DatacenterCharacteristics characteristics = new DatacenterCharacteristics(arch, os, vmm, hostList, time_zone, cost, costPerMem, costPerStorage, costPerBw);
        // 6. Finally, we need to create a PowerDatacenter object.
        Datacenter datacenter = null;
        try {
            datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return datacenter;
    }

    private static DatacenterBroker createBroker(String name) {
        DatacenterBroker broker = null;
        try {
            broker = new DatacenterBroker(name);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return broker;
    }

    private static void printCloudletList(List<Cloudlet> list) {
        int size = list.size();
        Cloudlet cloudlet;
        Log.printLine("========== OUTPUT ==========");
        Log.printLine("Cloudlet ID" + "STATUS" + "Data center ID" + "VM ID" + "Time" + "Start Time" + "Finish Time");
        for (int i = 0; i < size; i++) {
            cloudlet = list.get(i);
            Log.print("" + cloudlet.getCloudletId());
            if (cloudlet.getCloudletStatus() == Cloudlet.SUCCESS) {
                Log.print("SUCCESS");
            }
            Log.printLine(cloudlet.getResourceId() + cloudlet.getVmId() + (cloudlet.getActualCPUTime()) + cloudlet.getExecStartTime() + " " + (cloudlet.getFinishTime()));
        }
    }
}
1.2.3 输出示例
Cloudlet ID STATUS Data center ID VM ID Time Start Time Finish Time
0 SUCCESS 3 0 320 0.1 320.1
8 SUCCESS 3 3 320 0.1 320.1
109 SUCCESS 3 104 320 200.1 520.1

1.3 流程图

graph TD;
    A[初始化 CloudSim 包] --> B[定义容器分配策略];
    B --> C[定义 VM 选择策略];
    C --> D[定义主机选择策略];
    D --> E[定义阈值];
    E --> F[创建主机列表];
    F --> G[定义 VM 到容器的分配策略];
    G --> H[定义超额预订因子];
    H --> I[分配日志地址];
    I --> J[提交列表];
    J --> K[确定模拟终止时间];
    K --> L[创建实验名称];
    L --> M[打印云任务对象];
    M --> N[创建虚拟机];
    N --> O[创建主机列表];
    O --> P[创建数据中心];
    P --> Q[创建容器];
    Q --> R[创建云任务列表];
    R --> S[打印模拟结果];

2. 云平台实验

2.1 实验概述

涵盖了多个云平台相关的实验,包括虚拟机的备份恢复、克隆,MapReduce 程序在不同文件大小下的性能评估,多虚拟机之间的通信配置,虚拟化的安装和配置,以及各种云服务的研究和实现等。

2.2 平台安装

2.2.1 VMware Workstation 安装步骤
  1. 以 root 或具有 sudo 权限的非 root 用户登录服务器:
    • 在 RedHat 系统上: # yum update
    • 在 Fedora 上: # dnf update
  2. 从 VMware 官方网站下载 VMWare Workstation Pro 安装脚本包。
  3. 下载脚本文件后,进入包含脚本文件的目录并设置执行权限:
    • # chmod a+x VMware-Workstation-Full-15.5.1-15018445.x86_64.bundle
  4. 在 Linux 主机系统上运行安装脚本:
    • # ./VMware-Workstation-Full-15.5.1-15018445.x86_64.bundle 或 $ sudo ./VMware-Workstation-Full-15.5.1-15018445.x86_64.bundle
  5. 启动软件:在终端中输入 vmware 。
    • 如果没有 GCC GNU C 编译器,会提示安装,按“Cancel”继续。
  6. 返回终端安装“Development Tools”:
    • 在 RedHat 系统上: [root@tecmint Downloads]# yum groupinstall “Development tools”
    • 在 Debian 系统上: root@tecmint: # apt-get install build-essential
  7. 安装内核头文件:
    • 在 RedHat 系统上: [root@tecmint Downloads]# yum install kernel-headers
    • 在 Debian 系统上: root@tecmint: # apt-get install linux-headers-‘uname -r‘
2.2.2 Hadoop 平台安装步骤
  1. 启动 Hadoop 集群,支持三种模式:本地(独立)模式、伪分布式模式和完全分布式模式。
  2. 检查是否可以无密码 ssh 到本地主机: $ ssh localhost
  3. 如果不能无密码 ssh,执行以下命令:
    • $ ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
    • $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    • $ chmod 0600 ~/.ssh/authorized_keys
  4. 格式化文件系统: $ bin/hdfs namenode -format
  5. 启动 NameNode 守护进程和 DataNode 守护进程: $ sbin/start-dfs.sh
  6. Hadoop 守护进程日志输出到 $HADOOP_LOG_DIR 目录(默认为 $HADOOP_HOME/logs )。
  7. 浏览 NameNode 的 Web 界面:默认地址为 http://localhost:50070/
  8. 创建执行 MapReduce 作业所需的 HDFS 目录:
    • $ bin/hdfs dfs -mkdir /user
    • $ bin/hdfs dfs -mkdir /user/<username>
2.2.3 Kernel-based Virtual Machine (KVM) 安装步骤
  1. 安装提供用户级 KVM 和磁盘映像管理器的软件包: [root@server ]# yum install qemu-kvm qemu-img
  2. 安装管理虚拟平台的工具: [root@server]# yum install virt-manager libvirt libvirt-python libvirt-client
  3. 启动虚拟化守护进程: [root@server]#systemctl restart libvirtd
  4. 检查守护进程状态: [root@server ]#systemctl status libvirtd
  5. 选择创建虚拟机的安装方法,这里以本地安装介质为例,提供“ISO”映像的路径。
  6. 使用虚拟磁盘安装虚拟机。
  7. 输入虚拟机名称和其他高级选项,点击“完成”,出现控制控制台以管理来宾操作系统。
2.2.4 OwnCloud 在 Ubuntu 上的安装步骤
  1. 使用“apt”命令更新系统包和仓库: $ sudo apt update -y & sudo apt upgrade -y
  2. 安装 Apache 网络服务器、PHP 7.2 及相关模块:
    • $ sudo apt install apache2 libapache2-mod-php7.2 openssl php-imagick php7.2-common php7.2-curl php7.2-gd php7.2-imap php7.2-intl php7.2-json php7.2-ldap php7.2-mbstring php7.2-mysql php7.2-pgsql php-smbclient php-ssh2 php7.2-sqlite3 php7.2-xml php7.2-zip
  3. 验证 Apache 是否安装: $ sudo dpkg -l apache
  4. 启动并设置 Apache 在开机时运行: $ sudo systemctl enable apache2
  5. 在浏览器中输入服务器的 IP 地址,检查 Apache 是否运行。
  6. 检查 PHP 是否安装: $ php -v
  7. 安装 MariaDB: $ sudo apt install mariadb-server
  8. 安全配置 MySQL 服务器: $ sudo mysql secure installation
  9. 设置 root 密码并按提示操作。
  10. 创建 OwnCloud 数据库:
    • 登录 MariaDB: $ sudo mysql -u root -p
    • 执行以下命令:
      • MariaDB [(none)]> CREATE DATABASE ownCloud_db;
      • MariaDB [(none)]> GRANT ALL ON ownCloud_db.* TO 'ownCloud_user'@localhost';
      • MariaDB [(none)]> FLUSH PRIVILEGES;
      • MariaDB [(none)]> EXIT;
  11. 下载 OwnCloud 压缩文件: $ sudo wget https://download.ownCloud.org/community/ownCloud-10.4.0.zip
  12. 解压文件到 /var/www/ 目录: $ sudo unzip ownCloud-10.4.0.zip -d /var/www/
  13. 设置权限:
    • $ sudo chown -R www-data:www-data /var/www/ownCloud/
    • $ sudo chmod -R 755 /var/www/ownCloud/
  14. 配置 Apache 以支持 OwnCloud: $ sudo vim /etc/apache2/conf-available/ownCloud.conf
  15. 重启 Apache 网络服务器: $ sudo systemctl restart apache2
  16. 在浏览器中输入服务器地址并添加 /ownCloud 后缀。
2.2.5 AWS Cloud Development Kit (AWS CDK) 安装步骤
  1. 提供 AWS 凭证和区域信息:
    • 安装 AWS CLI 并执行 aws configure ,按提示输入 AWS 访问密钥 ID、秘密访问密钥和默认区域。
    • 也可以手动编辑 /~/.aws/config 和 /~/.aws/credentials (Linux 或 Mac)或 %USERPROFILE%\aws\config 和 %USERPROFILE%\aws\credentials (Windows)文件,格式如下:
      • 在 /~/.aws/config 或 %USERPROFILE%\aws\config 中:
[default]
region=us-west-2
    - 在 `/~/.aws/credentials` 或 `%USERPROFILE%\aws\credentials` 中:
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
  1. 使用 Node 包管理器全局安装 AWS CDK 工具包: npm install -g aws-cdk

2.3 安装流程图

graph TD;
    A[选择平台] --> B{VMware Workstation};
    A --> C{Hadoop 平台};
    A --> D{KVM};
    A --> E{OwnCloud};
    A --> F{AWS CDK};
    B --> B1[更新系统];
    B1 --> B2[下载安装包];
    B2 --> B3[设置权限];
    B3 --> B4[安装];
    B4 --> B5[启动软件];
    B5 --> B6[安装开发工具];
    C --> C1[选择模式];
    C1 --> C2[检查 ssh];
    C2 --> C3[配置 ssh];
    C3 --> C4[格式化文件系统];
    C4 --> C5[启动守护进程];
    C5 --> C6[浏览界面];
    C6 --> C7[创建目录];
    D --> D1[安装软件包];
    D1 --> D2[安装管理工具];
    D2 --> D3[启动守护进程];
    D3 --> D4[检查状态];
    D4 --> D5[选择安装方法];
    D5 --> D6[安装虚拟机];
    E --> E1[更新系统];
    E1 --> E2[安装服务器和模块];
    E2 --> E3[验证安装];
    E3 --> E4[配置数据库];
    E4 --> E5[下载解压文件];
    E5 --> E6[设置权限];
    E6 --> E7[配置 Apache];
    E7 --> E8[重启服务器];
    E8 --> E9[访问网站];
    F --> F1[配置凭证];
    F1 --> F2[安装工具包];

2.4 实验总结

实验名称 主要操作步骤 关键注意事项
VMware Workstation 安装 系统更新、下载安装包、设置权限、安装、启动软件、安装开发工具 注意不同系统的命令差异,启动软件时若缺少 GCC 编译器可按“Cancel”继续
Hadoop 平台安装 选择模式、检查 ssh、配置 ssh、格式化文件系统、启动守护进程、浏览界面、创建目录 确保 ssh 无密码登录,格式化文件系统操作需谨慎
KVM 安装 安装软件包、安装管理工具、启动守护进程、检查状态、选择安装方法、安装虚拟机 注意守护进程的启动和状态检查
OwnCloud 在 Ubuntu 上的安装 更新系统、安装服务器和模块、验证安装、配置数据库、下载解压文件、设置权限、配置 Apache、重启服务器、访问网站 数据库配置和权限设置要正确
AWS CDK 安装 配置凭证、安装工具包 提供正确的 AWS 凭证和区域信息

2.5 实验拓展

上述实验为云平台的基础操作和使用提供了指导,但在实际应用中,还可以进行更多的拓展和优化。例如:
- 性能优化 :在 Hadoop 平台上,可以通过调整集群配置参数、优化 MapReduce 程序等方式提高性能。
- 安全加固 :在云平台中,安全是至关重要的。可以通过设置防火墙、加密数据、定期更新软件等方式加强安全防护。
- 多平台集成 :可以将不同的云平台进行集成,实现资源的共享和协同工作。

3. 总结与展望

3.1 总结

本文介绍了 CloudSim 示例和云平台实验的相关内容。CloudSim 示例展示了如何使用 CloudSim 进行容器模拟和在运行时创建模拟实体,提供了详细的算法说明、源代码和输出示例。云平台实验部分涵盖了多个云平台相关的实验,包括虚拟机的备份恢复、克隆,MapReduce 程序在不同文件大小下的性能评估,多虚拟机之间的通信配置,虚拟化的安装和配置,以及各种云服务的研究和实现等,并详细介绍了多个平台的安装步骤。

3.2 展望

随着云计算技术的不断发展,CloudSim 和云平台的应用也将越来越广泛。未来,可以进一步探索 CloudSim 的高级功能,如资源调度算法的优化、分布式系统的模拟等。在云平台方面,可以关注新兴的云服务和技术,如人工智能、大数据分析等在云平台上的应用,以及云原生技术的发展和应用。同时,也需要加强云平台的安全管理和性能优化,以满足不断增长的业务需求。

3.3 流程图总结

graph LR;
    A[CloudSim 示例] --> B[示例 7: 容器模拟];
    A --> C[示例 8: 运行时创建实体];
    D[云平台实验] --> E[实验概述];
    D --> F[平台安装];
    F --> G[VMware Workstation];
    F --> H[Hadoop 平台];
    F --> I[KVM];
    F --> J[OwnCloud];
    F --> K[AWS CDK];
    D --> L[实验总结];
    D --> M[实验拓展];
    N[总结与展望] --> O[总结];
    N --> P[展望];
    N --> Q[流程图总结];

通过以上的总结和展望,我们可以更好地理解 CloudSim 示例和云平台实验的内容,并为未来的学习和实践提供方向。希望本文对读者有所帮助,能够激发大家对云计算技术的兴趣和探索欲望。

相关推荐

24、CloudSim示例及云平台实验介绍

本文详细介绍了CloudSim示例7和示例8的算法流程、源代码及输出结果,展示了云环境中虚拟机与容器的资源分配与动态管理机制。同时涵盖了多种云平台实验,包括VMware Workstation、Hadoop、KVM、OwnCloud和AWS CDK的安装与配置步骤,并通过流程图和对比表格帮助读者理解不同技术的应用场景与核心功能。文章最后总结了实验要点并提出拓展思考,旨在为云计算模拟与平台实践提供系统性指导。

q1w3e5r7t9y的博客 63

【信息科学与工程学】【通信工程】第十八篇 企业网、园区网、数据中心、广域网各类业务网络02

模型类别基本假设网络表示耦合函数渗透方程临界条件物理意义一对一依赖​每个交通节点与一个通信节点相互依赖双层网络:交通层G_T=(V_T,E_T),通信层G_C=(V_C,E_C),层间一一对应边E_I依赖函数:RT​=fT​(RC​,p),RC​=fC​(RT​,p)自洽方程: RT​=p[1−GT​0(1−RT​)][1−GC​0(1−RC​)] RC​=p[1−GC​0(1−RC​)][1−GT​0(1−RT​)]pc​=⟨kT2​⟩⟨kC2​⟩​1​ ⟨k²⟩=⟨k(k-1)⟩对称耦

weixin_49199313的博客 1144

基于 Qt 6 / C++17 的多算法加解密工具(学习研究用途) 涵盖编码、古典密码、对称/非对称加密、哈希摘要共 24 种算法,全部纯 C++ 自实现,不依赖 OpenSSL/GmSSL

基于 Qt 6 / C++17 的多算法加解密工具(学习研究用途)。涵盖编码、古典密码、对称/非对称加密、哈希摘要共 24 种算法,全部纯 C++ 自实现,不依赖 OpenSSL/GmSSL。含图形界面、批量文件加解密、密钥管理、性能测试与操作日志。提供标准测试向量自测。

Delphi 13.2控件之SoloMD-5.0.21-x64-en-US.msi

Delphi 13.2控件之SoloMD_5.0.21_x64_en-US.msi

数字工厂AI大模型赋能智能体平台及AI场景应用规划方案(决策评审版).pptx

数字工厂AI大模型赋能智能体平台及AI场景应用规划方案(决策评审版).pptx

企业AIDC人工智能数据中心AI大模型赋能智能体平台及AI场景应用规划方案(技术方案版).pptx

企业AIDC人工智能数据中心AI大模型赋能智能体平台及AI场景应用规划方案(技术方案版).pptx

考虑一次调频以及二次调频和各机组调频特性的双目标风光水火储动态调度研究(Matlab代码实现)

考虑一次调频以及二次调频和各机组调频特性的双目标风光水火储动态调度研究(Matlab代码实现)内容概要:本文研究了一种考虑一次调频、二次调频以及各机组调频特性的双目标优化模型,用于风光水火储多能互补系统的动态调度问题。该模型以系统运行成本最小化和新能源消纳最大化为双重优化目标,综合考虑了各类电源的出力特性、储能系统的充放电行为及电网频率响应要求。通过Matlab编程实现了完整的求解流程,采用多目标优化算法对复杂约束条件下的调度方案进行求解,并对不同场景下的调度结果进行仿真分析,验证了所提模型在提升系统经济性与稳定性方面的有效性。研究还探讨了储能系统在平抑新能源波动、参与频率调节中的关键作用,为高比例可再生能源接入下的电力系统调度提供了理论支持和技术路径。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源调度、电力系统优化等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决含多种能源形式的复杂电力系统在实际运行中的动态调度问题;②研究储能系统在调频和促进新能源消纳中的协同机制;③掌握多目标优化在电力系统调度中的建模与实现方法; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件处理及多目标折衷分析方法,同时可通过修改参数进行不同场景的仿真实验,以加深对系统动态行为的理解。

图腾柱无桥PFC变换器+平均电流控制+PI电压双闭环前馈控制设计(Simulink仿真实现)

内容概要:本文系统研究了图腾柱无桥PFC变换器的高性能控制策略,采用平均电流控制与PI电压双闭环前馈控制相结合的方法,并基于Simulink平台构建了完整的仿真模型进行验证。文章深入剖析了控制系统的结构设计,重点阐述了电压外环与电流内环的协同工作机理,其中前馈控制的引入显著增强了系统对输入扰动的抑制能力和动态响应速度。通过仿真结果表明,该复合控制策略能够有效实现单位功率因数运行,大幅降低输入电流的总谐波畸变率(THD),同时确保直流母线电压具有优异的稳态精度和快速跟踪能力。本研究为高效率、高功率密度的PFC变换器设计提供了坚实的理论支撑和可靠的实践范例。; 适合人群:从事电力电子、电气自动化、新能源变换器研发的高校研究生、科研人员及企业工程师。; 使用场景及目标:①掌握图腾柱无桥PFC变换器的工作原理与建模方法;②深入理解平均电流控制、PI双闭环及前馈控制在电力电子系统中的综合应用;③学习使用Simulink进行电力电子变换器的系统级仿真与性能分析。; 阅读建议:建议读者结合文中提供的仿真模型,分模块(主电路、控制逻辑、调制环节)进行参数设置与仿真调试,重点关注电压环与电流环的动态响应、稳态精度以及THD指标的变化,以深化对控制策略的理解。

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)

内容概要:本文系统研究了基于序贯蒙特卡洛模拟法的配电网可靠性评估方法,重点聚焦于其在含分布式电源的复杂配电网中的应用。文章深入阐述了该方法的理论基础与实现流程,通过建立配电网元件的故障与修复过程的时间序列模型,模拟系统在长期运行中的状态演变,进而精确统计系统及负荷点的关键可靠性指标,如系统平均停电频率(SAIFI)、系统平均停电持续时间(SAIDI)、用户平均停电时间(CAIDI)等。研究依托Matlab平台完成了完整的仿真程序开发,并通过典型算例验证了所提方法的有效性与工程实用性。该方法能够充分考虑系统的时序特性与元件间的相关性,尤其适用于高比例分布式电源接入后带来的随机性与波动性较强的新型配电网可靠性分析。; 适合人群:具备电力系统分析基础知识和一定Matlab编程能力的高校研究生、科研机构研究人员,以及从事配电网规划、运行维护与风险管理的工程技术人员。; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的核心原理与具体实施步骤;②学习如何利用Matlab进行配电网时序仿真建模与可靠性指标的自动化计算;③为含分布式电源的现代配电网的规划设计、运行风险评估及韧性提升提供科学的量化分析工具与技术支撑。; 阅读建议:建议读者结合文中提供的Matlab代码实现,逐行调试并运行仿真程序,深入理解状态抽样、时间推进、故障遍历、指标累加等关键算法环节,并鼓励尝试将其应用于不同的网络拓扑结构或引入更多类型的分布式电源模型,以深化对方法适应性与扩展性的理解。

基于多策略改进蜣螂算法(MSDBO)的多无人机协同三维避障路径规划研究(Matlab代码实现)

内容概要:本文研究基于多策略改进的蜣螂优化算法(MSDBO)在多无人机协同三维避障路径规划中的应用,旨在解决复杂环境下多无人机安全、高效飞行的路径规划问题。通过引入多种优化策略对传统蜣螂算法进行改进,显著增强了算法的全局搜索能力、收敛速度与避障性能,并结合三维空间建模与多无人机协同机制,构建以路径成本(如距离、高度、威胁、转角等)为目标函数的优化模型。文中系统阐述了算法设计原理、路径规划建模方法及仿真实验过程,通过多场景对比实验验证了MSDBO算法在路径安全性、规划效率和多机协同性方面的优越性与鲁棒性。; 适合人群:具备一定算法基础和MATLAB编程能力,从事无人机控制、路径规划、智能优化算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决城市、山区等复杂环境下的多无人机协同飞行路径规划问题;②提升无人机集群在动态障碍物环境中的自主避障与协同能力;③为智能交通、应急救援、军事侦察等领域的多智能体路径规划提供技术支持。; 阅读建议:建议结合提供的Matlab代码进行仿真实践,深入理解算法实现细节与参数调优方法,同时可尝试在不同场景下测试算法性能,进一步掌握其适用边界与优化潜力。

阅读档案 低年级版.docx

阅读档案 低年级版.docx

基于斜坡补偿的Buck电路峰值电流+电压电流双闭环控制【附说明文档】(Simulink仿真实现)优快云首页发布文章优快云同步助手LLC谐振变换器开环+闭环软启动仿真设计(Simulink

内容概要:本文围绕三电平VIENNA整流器的双闭环控制与中点电位平衡问题展开研究,提出了一种基于电容电压差值补偿的中点电位平衡策略。通过构建电压外环与电流内环的双闭环PI控制系统,实现直流母线电压的稳定与输入电流的快速跟踪;在此基础上,引入上下电容电压差值作为反馈信号,结合SVPWM调制中冗余小矢量的时间分配机制,实现对中点电位的主动调节。仿真结果表明,该策略能有效抑制中点电位波动,显著提升电容电压均衡度,同时保持较低的输入电流THD,验证了“电压稳定—电流低谐波—中点均衡”多目标协同控制的可行性与有效性。; 适合人群:从事电力电子变换器控制、新能源发电、电动汽车充电等领域的科研人员及工程技术人员,尤其是具备一定MATLAB/Simulink仿真基础的研究生和电气工程专业高年级本科生。; 使用场景及目标:① 掌握三电平VIENNA整流器的工作原理与控制难点;② 学习双闭环PI控制器的设计与参数整定方法;③ 理解并应用基于SVPWM冗余矢量的中点电位主动平衡控制策略;④ 实现高性能整流器的仿真建模与性能验证。; 阅读建议:此资源以理论分析与Simulink仿真相结合的方式呈现,建议读者在阅读时同步搭建仿真模型,重点关注双闭环结构搭建、SVPWM调制模块实现以及中点平衡补偿环节的集成,通过对比投入与未投入补偿策略的仿真结果,深入理解控制策略的作用机理与性能边界。

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了全桥LLC谐振变换器在变频控制(PFM)与移相控制相结合的混合控制策略下的闭环仿真模型构建过程,基于Simulink平台实现。该变换器通过融合两种控制方式的优势,实现了高效、稳定的电压调节与软开关特性,适用于中高功率DC-DC转换应用场景。文档系统阐述了系统建模、控制环路设计(包括电压外环与电流内环)、谐振腔关键参数计算、PWM信号生成及闭环反馈机制的实现方法,并通过仿真验证了在不同负载条件下输出电压的稳定性、动态响应性能以及零电压开关(ZVS)的实现效果。同时,文中探讨了该模型与PFC、CLLC、DAB等其他电力电子系统的协同仿真潜力,凸显其在现代电力电子系统设计与研究中的重要价值。; 适合人群:具备扎实的电力电子技术理论基础,熟悉Simulink/Matlab仿真环境,从事开关电源、新能源变换器、电力电子系统设计及相关领域研发工作的工程师与高校研究生。; 使用场景及目标:①用于高校教学与科研项目中,帮助学生深入理解LLC谐振变换器的工作原理、谐振特性及混合控制策略的实现逻辑;②为工业界全桥LLC电源产品的开发提供高保真的仿真原型与设计参考,加速产品迭代;③支持研究人员对变频-移相混合控制下的系统效率优化、动态响应提升、软开关范围拓展等关键技术问题进行深入探究。; 阅读建议:建议读者结合所提供的Simulink仿真模型文件进行实操学习,重点关注控制环路中PI参数的整定过程与谐振元件(如谐振电感、励磁电感、谐振电容)设计之间的强耦合关系,并通过主动调整输入电压、负载大小等工况条件,观察系统的启动过程、稳态性能和抗干扰能力,从而深刻掌握LLC变换器的非线性动态行为与控制规律。

考虑风光火储+需求响应+P2G多能源系统NSGA-II多目标优化调度(Matlab代码实现)

内容概要:本文针对包含风能、光伏、火电、储能系统、电力转气(P2G)及需求响应的多能源系统,提出了一种基于NSGA-II多目标优化算法的调度模型,并通过Matlab代码实现了仿真求解。该模型综合考虑了系统运行的经济性、环保性以及能源利用效率等多个优化目标,旨在实现多能源系统在复杂约束条件下的协调优化与高效调度。研究详细构建了各类能源单元的数学模型,阐述了P2G技术的工作机理与需求响应机制,建立了完整的多目标优化问题框架,并利用NSGA-II算法求解获得Pareto最优解集,为决策者提供了多样化、权衡明确的调度方案选择。; 适合人群:具备一定电力系统、能源系统或优化理论基础,熟悉Matlab编程与基本优化算法(如遗传算法)的科研人员、研究生及工程技术人员。; 使用场景及目标:① 掌握多能源系统集成建模方法,理解风光火储与P2G、需求响应的协同机制;② 学习NSGA-II等多目标进化算法在复杂工程优化问题中的应用流程与实现技巧;③ 获取可用于科研复现、课题研究或工程方案设计的Matlab代码参考与仿真框架。; 阅读建议:建议读者结合Matlab代码逐步理解模型构建与算法实现细节,重点关注目标函数设计、约束条件处理及Pareto前沿的分析方法,有条件者可进一步扩展模型规模或引入新的优化算法进行对比研究。

优快云首页 发布文章 优快云同步助手 有限元悬臂梁-含一维和二维多种单元类型研究(Matlab代码实现) 34 100 摘要:会在推荐、列表等场景外露,帮助读者快速了解内容,支持一键将

内容概要:本文针对无线传感器网络(WSN)中因节点能量受限而导致网络寿命缩短的问题,提出了一种改进型LEACH协议,旨在有效延长网络生命周期。该协议在传统LEACH协议基础上,通过优化簇头选举机制、均衡节点剩余能量分布、改进数据聚合与传输策略等方式,显著缓解了部分节点因过度负载而过早死亡的现象。文中系统阐述了改进协议的设计原理、算法流程及关键参数设置,并基于Matlab平台构建仿真环境,通过与原始LEACH协议的对比实验,验证了该改进方案在延长网络生存时间、提升能量利用效率和增强数据传输稳定性方面的优越性能。; 适合人群:具备无线传感器网络基础知识和Matlab编程能力的高校研究生、科研人员以及从事物联网、边缘计算等相关领域技术研发的工程师。; 使用场景及目标:①作为教学案例用于讲授WSN路由协议设计与优化方法;②为实际物联网系统开发提供可借鉴的能量高效型通信协议解决方案;③支撑学术研究中对LEACH类协议性能评估与改进策略验证的需求,助力相关论文撰写与课题研究。; 阅读建议:建议读者结合文中的Matlab代码实现部分进行仿真实验,通过调整网络规模、节点分布、能量参数等变量,深入理解协议运行机制与性能影响因素,并可在现有基础上进一步探索引入分簇优化、多跳传输或机器学习辅助决策等高级改进策略。

基于粒子群优化算法的三方三层的主从博弈能源系统优化模型研究(Matlab代码实现)

内容概要:本文研究了一种基于粒子群优化算法的三方三层主从博弈能源系统优化模型,旨在实现综合能源系统的多目标优化调度。该模型综合考虑了风能、太阳能、火电、压缩空气储能、抽水蓄能及电化学储能等多种能源形式的联合调度问题,通过构建主从博弈架构协调不同利益主体间的决策行为,以实现系统经济性、稳定性与低碳化的协同优化。研究采用粒子群优化算法求解该复杂非线性优化问题,并结合IEEE 39节点系统进行潮流计算与电能质量分析,验证了所提模型在降低运行成本、削减负荷峰谷差、减少碳排放等方面的综合效益。; 适合人群:具备电力系统分析、优化算法或博弈论基础知识的科研人员、电气工程及相关专业的研究生,以及从事能源系统规划与运行管理的技术人员。; 使用场景及目标:①应用于综合能源系统(IES)的容量配置与多主体协同运行优化;②适用于高比例可再生能源接入下的电网调度与多类型储能协同控制;③为多利益主体参与的分布式能源交易、市场竞价及博弈决策提供算法支持与建模框架。; 阅读建议:读者应重点关注模型的三层架构设计、主从博弈的数学建模过程以及粒子群算法的实现细节,结合提供的Matlab代码进行仿真复现,深入理解算法在多目标优化中的收敛特性与工程适用性。

主动配电网故障恢复的重构与孤岛划分统一模型研究升级版本(Matlab代码实现)

内容概要:本文研究了一种主动配电网故障恢复的重构与孤岛划分统一模型,并提供了基于Matlab的代码实现。该模型旨在配电网发生故障后,通过网络重构和孤岛划分的协同优化,快速恢复尽可能多的重要负荷供电,同时确保系统的安全稳定运行。研究综合考虑了分布式电源、负荷分级、网络拓扑约束以及电气约束(如潮流、电压、线路容量)等因素,构建了一个多目标、多约束的混合整数非线性优化问题,并采用先进的优化算法进行高效求解,以实现故障后的最优恢复策略。相较于传统方法,该统一模型更具系统性和全局性,能够有效提升配电网的韧性与自愈能力。; 适合人群:具备电力系统分析、优化算法及Matlab编程基础,从事智能配电网、微电网、电力系统自动化、配电系统运行与控制等相关领域研究的研发人员、高校师生及工程技术人员。; 使用场景及目标:① 学习和掌握主动配电网在故障情况下的高级恢复策略,特别是网络重构与孤岛划分的协同优化原理与方法;② 理解如何将复杂的电力系统运行问题转化为可计算的数学优化模型,掌握目标函数设计、约束条件建模的技巧;③ 获取一套完整的、可用于科研验证、教学演示或工程方案预研的Matlab代码实例,加速自身研究进程。; 阅读建议:在阅读时,应系统性地梳理模型的构建逻辑,深入理解其目标函数中各项(如负荷恢复量、网络损耗、操作成本等)的物理意义与权重设置,以及各类电气和拓扑约束的具体表达形式。务必结合所提供的Matlab代码,动手调试、运行仿真案例,通过改变参数和网络结构来观察优化结果的变化,从而深刻掌握算法的实现细节、求解器的使用方法以及模型的适应性与局限性,最终实现对该技术的融会贯通与创新应用。

「免费开源」从 OCR 识别到结构化输出:合同文本高效比对的完整解决方案!

本文将系统拆解这一解决方案的技术逻辑、实施步骤与落地价值,为企业合同管理数字化转型提供实操指南。字段提取:自动识别并提取预设的关键字段(如 “甲方”“乙方”“合同金额”“履约期限” 等),若遇到模糊表述(如 “付款时间为合同签订后 30 个工作日内”),系统可自动解析为 “履约期限:合同签订日 + 30 工作日”;预设结构化字段:根据合同类型(如采购合同、服务合同、租赁合同),定义需提取的关键字段(如 “甲方名称”“乙方名称”“合同金额”“有效期起 / 止日期”“履约地点”“违约金比例” 等);

qxsz_yyh的博客 837

大数据面试 逻辑题

逻辑题大致分为比较逻辑题、分析逻辑题、综合逻辑题、抽象逻辑题、概括逻辑题、推理逻辑题、论证逻辑题等,由于这类题比较考验综合素质,因此也一直是各大企业笔试、面试时经常喜欢考察的题目类型之一。很多童鞋认为逻辑题很难,其实不然。多做练习,打开思路,这类题还是可以轻易化解的。 下面为大家整理了网络上最全的75道逻辑判断测试题。在每道题目下方有答案,是用白色显示的,反选就可以看到啦~ 【1】假设有一个池...

zzq_0916s的博客 4424

问题解决:打开VMware创建的虚拟机,电脑立刻蓝屏并重启

VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credenti

weixin_55118477的博客 3万+

EMB电子机械制动执行器五大核心部件选型解析

本文介绍了EMB电子机械制动执行器五大核心部件的选型方案:采用无刷直流电机作为驱动源,兼具高扭矩和快速响应特性;选用滚珠丝杠传动机构,实现高效旋转-直线转换;行星齿轮减速器满足紧凑空间内的增扭需求;QT450-QT550材质的钳体确保刚度要求;应变片式压力传感器实现夹紧力精确测量。各部件选型综合考虑了性能、可靠性和空间限制,为EMB系统设计提供了完整解决方案。

m0_59012156的博客 1749

vue2 - elementUI表格table树形结构复选框勾选父子联动示例,el-table树状表格tree复选框checkbox多选框全选/反选取消children(当子级全选中,父级自动勾选)

vue2,elementui,el-table树状表格多选,树形结构结合多选框使用,实现单选父子联动全选反选,勾选联动父级勾选,表格多选check父子联动,table表格children如何嵌入复选框,el-table使用多选框与树形数据写一个有半选全选功能的表格,el-table树形表格实现复选框多选效果,表格树状结构多选,每一个row都可以选中并且联动全选按钮,table选父带子选子带父,树形数据与懒加载,Table表格树形结构多选框选中父级时会选中子级,elementUI表格里树形结构嵌套复选框全选全

✅ 精选推荐文章 1万+

3、图像中文字信息提取技术全解析

本文全面解析了图像中文字信息提取(Text Information Extraction,TIE)的技术原理、挑战及应用领域。详细介绍了图像中三种主要文字形式:场景文字、字幕文字和文档文字的特点及提取难点。系统阐述了TIE技术的主要流程步骤,包括文字检测、定位、提取与增强、识别等关键阶段,并对主流技术方法进行了分类比较,包括基于连通组件、边缘、纹理等方法的优缺点分析。文章还介绍了多种其他提取技术,如二值化方法、混合方法、基于梯度的方法等,并提出了一种基于立体帧的新型场景文字提取方法,通过实验验证了该方法在召

ll5678的博客 120

论deepseek软件底层原理

如处理医学文本时,将任务分配给擅长医学知识处理的专家,避免通用模块处理的低效性,极大提升计算效率与任务处理的针对性。教师模型复杂且强大,学生模型结构简单。协作处理:多模块协作时,建立数据流通与交互机制,各模块按顺序或并行处理数据,不断传递与更新中间结果,共同完成复杂任务。(一)输入处理与任务判断 输入预处理:接收输入数据,如用户文本提问,首先进行清洗,去除噪声数据、特殊字符等。任务分类:通过MoE架构“路由器”,依据输入数据特征,判断任务所属领域与类型,如文本分类、情感分析等,为后续处理模块选择提供依据。

欢乐打代码! 2738

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 42、卷积神经网络深入解析
下一篇: 3、英特尔 Galileo Gen 2 开发板:物联网硬件基础搭建与 Python 开发指南
java5
博客等级 码龄22年 85粉丝 2103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值