C : 线性规划例题求解

news2024/7/2 21:09:35

Submit Page   TestData   Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 93     Solved: 49    


Description

求解下述线性规划模型的最优值min �1�1+�2�2+�3�3�.�. �11�1+�12�2+�13�3≤�1>0�21�1+�22�2+�23�3≤�2>0�31�1+�32�2+�33�3≤�3>0�1,�2,�3≥0

Input

依次输入�1�2�3�11�12�13�1�21�22�23�2�31�32�33�3

Output

目标函数最优值,保留小数点后两位有效数字。若无最优解,输出“No solution”。

Sample

#0
Input

Copy

1 -2 0
1 -1 0 1
-2 1 0 4
1 1 1 10
Output

Copy

-14.00

Hint

#include <iostream>
#include <cmath>
#include "stdio.h"
using namespace std;
#define M 10000
double kernel[110][310];
int m = 0, n = 0, t = 0;
void input()
{
	// cin >> n;
	// cin >> m;
	m = 3;
	n = 3;
	int i, j;
	// 初始化核心向量
	for (i = 0; i <= m + 1; i++)
		for (j = 0; j <= n + m + m; j++)
			kernel[i][j] = 0;
	for (i = 1; i <= n; i++)
		cin >> kernel[0][i];
	for (i = 1; i <= m; i++)
	{
		// cout<<"    不等式"<<i<<"  ";
		for (j = 1; j <= n + 2; j++)
		{
			if (j == n + 1)
			{
				kernel[i][j] = 1;
			}
			else
			{
				cin >> kernel[i][j];
			}
		}
	}

	for (i = 1; i <= m; i++)
	{
		kernel[i][0] = kernel[i][n + 2];
		kernel[i][n + 2] = 0;
	}

	t = 1;
	if (t == -1)
		for (i = 1; i <= n; i++)
			kernel[0][i] = (-1) * kernel[0][i];
	for (i = 1; i <= m; i++)
	{
		kernel[i][n + i] = kernel[i][n + 1];
		if (i != 1)
			kernel[i][n + 1] = 0;
	}
}

// 算法函数
void comput()
{
	int i, j, flag, temp1, temp2, h, k = 0, temp3[100];
	double a, b[110], temp, temp4[110], temp5[110], f = 0, aa, d, c;
	for (i = 1; i <= m; i++)
		temp3[i] = 0.0000;
	for (i = 0; i < 11; i++)
	{
		temp4[i] = 0.000;
		temp5[i] = 0.0000;
	}
	for (i = 1; i <= m; i++)
	{
		if (kernel[i][n + i] == -1)
		{
			kernel[i][n + m + i] = 1;
			kernel[0][n + m + i] = M;
			temp3[i] = n + m + i;
		}
		else
			temp3[i] = n + i;
	}
	for (i = 1; i <= m; i++)
		temp4[i] = kernel[0][temp3[i]];

	do
	{
		for (i = 1; i <= n + m + m; i++)
		{
			a = 0;
			for (j = 1; j <= m; j++)
				a += kernel[j][i] * temp4[j];
			kernel[m + 1][i] = kernel[0][i] - a;
		}
		for (i = 1; i <= n + m + m; i++)
		{
			if (kernel[m + 1][i] >= 0)
				flag = 1;
			else
			{
				flag = -1;
				break;
			}
		}
		if (flag == 1)
		{
			for (i = 1; i <= m; i++)
			{
				if (temp3[i] <= n + m)
					temp1 = 1;
				else
				{
					temp1 = -1;
					break;
				}
			}
			if (temp1 == 1)
			{
				// cout << " 此线性规划的最优解存在!" << endl << endl << "  最优解为:" << endl << endl << "     ";
				for (i = 1; i <= m; i++)
					temp5[temp3[i]] = kernel[i][0];
				for (i = 1; i <= n; i++)
					f += t * kernel[0][i] * temp5[i];

				for (i = 1; i <= n; i++)
				{
					// cout << "x" << i << " = " << temp5[i];
					// if (i != n)
					// cout << ", ";
				}
				// cout << " ;" << endl << endl << "     最优目标函数值f= " << f << endl << endl;
				printf("%.2f\n", f);
				return;
			}
			else
			{
				// cout << " 此线性规划无解" << endl << endl;
				cout<<"No solution"<<endl;
				return;
			}
		}
		if (flag == -1)
		{
			temp = 100000;
			for (i = 1; i <= n + m + m; i++)
				if (kernel[m + 1][i] < temp)
				{
					temp = kernel[m + 1][i];
					h = i;
				}

			for (i = 1; i <= m; i++)
			{
				if (kernel[i][h] <= 0)
					temp2 = 1;
				else
				{
					temp2 = -1;
					break;
				}
			}
		}
		if (temp2 == 1)
		{
				cout<<"No solution"<<endl;
			// cout << "此线性规划无约束";
			return;
		}
		if (temp2 == -1)
		{
			c = 100000;
			for (i = 1; i <= m; i++)
			{
				if (kernel[i][h] != 0)
					b[i] = kernel[i][0] / kernel[i][h];
				if (kernel[i][h] == 0)
					b[i] = 100000;
				if (b[i] < 0)
					b[i] = 100000;
				if (b[i] < c)
				{
					c = b[i];
					k = i;
				}
			}
			temp3[k] = h;
			temp4[k] = kernel[0][h];
			d = kernel[k][h];
			for (i = 0; i <= n + m + m; i++)
				kernel[k][i] = kernel[k][i] / d;
			for (i = 1; i <= m; i++)
			{
				if (i == k)
					continue;
				aa = kernel[i][h];
				for (j = 0; j <= n + m + m; j++)
					kernel[i][j] = kernel[i][j] - aa * kernel[k][j];
			}
		}

	} while (1);
	return;
}

int main()
{
	input();
	for (int i = 1; i < n; i++)
	{
		for (int j = 1; j < m + 2; j++)
		{
			// cout<<kernel[i][j]<<" ";
		}
		// cout<<endl;
	}
	comput();
	// int a = 0;
	// scanf("%d", &a);
	// cout<<f<<endl;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1880278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 并发编程常见问题

1、线程状态它们之间是如何扭转的&#xff1f; 1、谈谈对于多线程的理解&#xff1f; 1、对于多核CPU&#xff0c;多线程可以提升CPU的利用率&#xff1b; 2、对于多IO操作的程序&#xff0c;多线程可以提升系统的整体性能及吞吐量&#xff1b; 3、使用多线程在一些场景下可…

StringUTF_16错误认识字节长度

众所周知&#xff0c;在 UTF-8 编码中&#xff0c;中文字符通常占用 3 个字节: import java.nio.charset.StandardCharsets;/*** author shenyang* version 1.0* info untitled* since 2024/6/30 上午9:42*/ public class Test {public static void main(String[] args) {Stri…

【机器学习】机器学习的重要方法——强化学习:理论,方法与实践

目录 一、强化学习的核心概念 二、强化学习算法的分类与示例代码 三.强化学习的优势 四.强化学习的应用与挑战 五、总结与展望 强化学习&#xff1a;理论&#xff0c;方法和实践 在人工智能的广阔领域中&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&…

第3章-数据类型和运算符

#本章目标 掌握Python中的保留字与标识符 理解Python中变量的定义及使用 掌握Python中基本数据类型 掌握数据类型之间的相互转换 掌握eval()函数的使用 了解不同的进制数 掌握Python中常用的运算符及优先级1&#xff0c;保留字与标识符 保留字 指在Python中被赋予特定意义的一…

【操作系统】内存管理——页面分配策略(个人笔记)

学习日期&#xff1a;2024.6.28 内容摘要&#xff1a;页面分配策略和内存映射文件&#xff0c;内存映射文件 页面分配置换策略 基本概念 驻留集&#xff0c;指请求分页存储管理中给进程分配的物理块的集合&#xff0c;在采用了虚拟存储技术的系统中&#xff0c;驻留集大小一…

docker harbor仓库搭建,主从库复制

背景&#xff1a;需要主机安装docker-ce和docer-compose #1.安装相关依赖. yum install -y yum-utils device-mapper-persistent-data lvm2 #2.下载官方的docker yum源文件 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo …

专题三:Spring容器ApplicationContext初始化

前面我们构建好了Spring源码&#xff0c;接下来肯定迫不及待来调试啦&#xff0c;来一起看看大名鼎鼎ApplicationContext 新建模块 1、基础步骤 2、重要文件 build.gradle plugins {id java }group org.springframework version 5.2.6.RELEASErepositories {mavenCentral(…

DDD学习笔记五

模型引力场&#xff1a;聚合 强作用力体现&#xff1a; 某个领域模型是另一些模型存在的前提&#xff0c;没有前者&#xff0c;后者就失去了生存的意义。 一组领域模型之间存在关联的领域逻辑&#xff0c;任何时候都不能违反。 一组领域模型必须以一个完整的、一致的状态呈现给…

专业指南:U盘数据恢复全攻略

一、引言&#xff1a;U盘数据恢复的重要性 在信息化日益发展的今天&#xff0c;U盘已成为我们日常生活中不可或缺的存储设备。然而&#xff0c;由于各种原因&#xff0c;U盘中的数据可能会面临丢失的风险。U盘数据恢复技术便应运而生&#xff0c;它旨在帮助用户找回因误删除、…

多平台自动养号【开心版】偷偷使用就行了!

大家好&#xff0c;今天我无意间发现了一款【多平台自动养号工具】&#xff0c;看了一下里面的功能还是挺全面的&#xff0c;包含了【抖音&#xff0c;快手&#xff0c;小红薯】还有一些截流功能 虽然这款工具功能强大&#xff0c;但美中不足的是需要付费的。但别担心&#xf…

线性结构之栈结构

栈是一种只能从一端存取数据并且遵循“后进先出”原则的线性存储结构。这句话中体现了栈结构的三个特征——只能从一端存取数据&#xff0c;遵循“后进先出”的原则和线性存储结构。因此如果我们要实现一个栈结构的数据结构&#xff0c;就必须要满足这三点要求。提到线性结构&a…

构建高效业财一体化管理体系

构建高效业财一体化管理体系 业财一体化战略意义 提升决策质量 强化数据支撑&#xff1a;通过整合业务与财务数据&#xff0c;为决策提供准确、实时的信息基础&#xff0c;确保分析的深度与广度。促进业务与财务协同&#xff1a;打破信息孤岛&#xff0c;实现业务流程与财务管…

最流行的文件同步软件

PanguFlow是一款免费的文件同步软件&#xff0c;他支持文件的全量同步、支持文件的增量同步、支持文件的实时备份&#xff0c;支持双向同步&#xff0c;支持三向同步甚至多向同步&#xff0c;支持无人值守运行。 PanguFlow数据同步软件下载地址https://pan.baidu.com/s/1GLjFR…

博客都在使用的打字机效果,居然这么简单?

效果展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>body …

在Ubuntu下将pulseaudio换成pipewire

1、为什么要将pulseaudio换成pipewire&#xff1f; PulseAudio 是一个成熟且广泛使用的音频服务器&#xff0c;适合一般桌面音频需求&#xff0c;但在性能和延迟上有一定限制。PipeWire 是一个更现代的解决方案&#xff0c;旨在统一音频和视频处理&#xff0c;提供高性能和低延…

【TB作品】密码锁,ATMEGA128单片机,Proteus仿真

题目 5 &#xff1a;密码锁 使用单片机实现简易密码锁&#xff0c;通过输入密码&#xff0c;实现门锁的开启&#xff08;控制继电器&#xff09;。 具体要求如下&#xff1a; &#xff08;1&#xff09;当输入正确密码后&#xff0c;继电器开启。 &#xff08;2&#xff09;当三…

Java web应用性能分析之【prometheus监控K8s指标说明】

常规k8s的监控指标 单独 1、集群维度 集群状态集群节点数节点状态&#xff08;正常、不可达、未知&#xff09;节点的资源使用率&#xff08;CPU、内存、IO等&#xff09; 2、应用维度 应用响应时间 应用的错误率 应用的请求量 3、系统和集群组件维度 API服务器状态控…

springcloud第4季 seata报could not find any implementation for class

一 问题说明 1.1 描述 在使用seata2.0alibaba-cloud 2022.0.0.0-RC2nacos 2.2.3 模拟下订单分布式事务场景&#xff0c;出现如下问题&#xff1a;java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 查看服务端&#xff1a;java.util.ServiceCo…

【每日刷题】Day78

【每日刷题】Day78 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1608. 特殊数组的特征值 - 力扣&#xff08;LeetCode&#xff09; 2. 1385. 两个数组间的距离值 - …

5.x86游戏实战-CE定位基地址

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;4.x86游戏实战-人物状态标志位 上一个内容通过CE未知的初始值、未变动的数值、…