【Linux】VS code编写cpp文件调用CPLEX求解,Makefile撰写方式

1、先给出Makefile

# 目标文件
TARGET = my_program# 源文件
SRC = blend.cpp# 头文件目录(如果有)
INCLUDES = -I./# CPLEX 路径设置(根据你的 CPLEX 安装路径)
CPLEX_INCLUDE = -I/mnt/c/users/daniel/Ubuntu/cplex/cplex/include
CONCERT_INCLUDE = -I/mnt/c/users/daniel/Ubuntu/cplex/concert/include
CPLEX_LIB = -L/mnt/c/users/daniel/Ubuntu/cplex/cplex/lib/x86-64_linux/static_pic
CONCERT_LIB = -L/mnt/c/users/daniel/Ubuntu/cplex/concert/lib/x86-64_linux/static_pic
CPLEX_LIBS = -lilocplex -lconcert -lcplex -lm -lpthread -ldl# 编译器
CXX = g++# 编译选项
CXXFLAGS = -fdiagnostics-color=always $(INCLUDES) $(CPLEX_INCLUDE) $(CONCERT_INCLUDE)# 链接选项
LDFLAGS = $(CPLEX_LIB) $(CONCERT_LIB) $(CPLEX_LIBS)# 生成目标文件
$(TARGET): $(SRC)$(CXX) $(CXXFLAGS) -o $(TARGET) $(SRC) $(LDFLAGS)# 清理目标
clean:rm -f $(TARGET)

2、文件解释

\qquad (1) SRC 后面放所有的.cpp文件,所有自己写的头文件放在和.cpp同一个文件目录下,通过INCLUDES 进行调用
\qquad (2) 其中“mnt/c/users/daniel/Ubuntu/cplex/”表示在Linux中安装的Cplex的绝对路径位置,可以根据自己的情况进行替换。
\qquad (3) CPLEX_INCLUDE 和 CONCERT_INCLUDE 表示cplex头文件的路径
\qquad (4) CPLEX_LIBS 用于指定 CPLEX 的库文件,用于链接。这包括 -lilocplex、-lcplex 等

\qquad (5) “blend.cpp”是官方给的测试文件,可以直接拷贝,下面给出源文件以供测试。

// -------------------------------------------------------------- -*- C++ -*-
// File: blend.cpp
// Version 22.1.0  
// --------------------------------------------------------------------------
// Licensed Materials - Property of IBM
// 5725-A06 5725-A29 5724-Y48 5724-Y49 5724-Y54 5724-Y55 5655-Y21
// Copyright IBM Corporation 2000, 2022. All Rights Reserved.
//
// US Government Users Restricted Rights - Use, duplication or
// disclosure restricted by GSA ADP Schedule Contract with
// IBM Corp.
// --------------------------------------------------------------------------
//
// blend.cpp -- A blending problem/* ------------------------------------------------------------Problem Description
-------------------Goal is to blend four sources to produce an alloy: pure metal, raw
materials, scrap, and ingots.Each source has a cost.
Each source is made up of elements in different proportions.
Alloy has minimum and maximum proportion of each element.Minimize cost of producing a requested quantity of alloy.------------------------------------------------------------ */#include <ilcplex/ilocplex.h>ILOSTLBEGINIloInt nbElements, nbRaw, nbScrap, nbIngot;
IloNum alloy;
IloNumArray nm, nr, ns, ni, p, P;IloNumArray2 PRaw, PScrap, PIngot;void define_data(IloEnv env) {nbElements = 3;nbRaw      = 2;nbScrap    = 2;nbIngot    = 1;alloy      = 71;nm = IloNumArray(env, nbElements, 22.0, 10.0, 13.0);nr = IloNumArray(env, nbRaw, 6.0, 5.0);ns = IloNumArray(env, nbScrap, 7.0, 8.0);ni = IloNumArray(env, nbIngot, 9.0);p = IloNumArray(env, nbElements, 0.05, 0.30, 0.60);P = IloNumArray(env, nbElements, 0.10, 0.40, 0.80);PRaw   = IloNumArray2(env, nbElements);PScrap = IloNumArray2(env, nbElements);PIngot = IloNumArray2(env, nbElements);PRaw[0] = IloNumArray(env, nbRaw, 0.20, 0.01);PRaw[1] = IloNumArray(env, nbRaw, 0.05, 0.00);PRaw[2] = IloNumArray(env, nbRaw, 0.05, 0.30);PScrap[0] = IloNumArray(env, nbScrap, 0.00, 0.01);PScrap[1] = IloNumArray(env, nbScrap, 0.60, 0.00);PScrap[2] = IloNumArray(env, nbScrap, 0.40, 0.70);PIngot[0] = IloNumArray(env, nbIngot, 0.10);PIngot[1] = IloNumArray(env, nbIngot, 0.45);PIngot[2] = IloNumArray(env, nbIngot, 0.45);
}int
main(int, char**)
{IloEnv env;try {IloInt j;define_data(env);IloModel model(env);IloNumVarArray m(env, nbElements, 0.0, IloInfinity);IloNumVarArray r(env, nbRaw,   0.0, IloInfinity);IloNumVarArray s(env, nbScrap, 0.0, IloInfinity);IloNumVarArray i(env, nbIngot, 0.0, 100000);IloNumVarArray e(env, nbElements);// Objective Function: Minimize Costmodel.add(IloMinimize(env, IloScalProd(nm, m) + IloScalProd(nr, r) +IloScalProd(ns, s) + IloScalProd(ni, i)  ));// Min and max quantity of each element in alloyfor (j = 0; j < nbElements; j++) {e[j] = IloNumVar(env, p[j] * alloy, P[j] * alloy);}// Constraint: produce requested quantity of alloymodel.add(IloSum(e) == alloy);// Constraints: Satisfy element quantity requirements for alloyfor (j = 0; j < nbElements; j++) {model.add(e[j] == m[j] + IloScalProd(PRaw[j], r)+ IloScalProd(PScrap[j], s)+ IloScalProd(PIngot[j], i));}// OptimizeIloCplex cplex(model);cplex.setOut(env.getNullStream());cplex.setWarning(env.getNullStream());cplex.solve();if (cplex.getStatus() == IloAlgorithm::Infeasible)env.out() << "No Solution" << endl;env.out() << "Solution status: " << cplex.getStatus() << endl;// Print resultsenv.out() << "Cost:" << cplex.getObjValue() << endl;env.out() << "Pure metal:" << endl;for(j = 0; j < nbElements; j++)env.out() << j << ") " << cplex.getValue(m[j]) << endl;env.out() << "Raw material:" << endl;for(j = 0; j < nbRaw; j++)env.out() << j << ") " << cplex.getValue(r[j]) << endl;env.out() << "Scrap:" << endl;for(j = 0; j < nbScrap; j++)env.out() << j << ") " << cplex.getValue(s[j]) << endl;env.out() << "Ingots : " << endl;for(j = 0; j < nbIngot; j++)env.out() << j << ") " << cplex.getValue(i[j]) << endl;env.out() << "Elements:" << endl;for(j = 0; j < nbElements; j++)env.out() << j << ") " << cplex.getValue(e[j]) << endl;}catch (IloException& ex) {cerr << "Error: " << ex << endl;}catch (...) {cerr << "Error" << endl;}env.end();return 0;
}

\qquad 最后,给出运行结果以供参考:
在这里插入图片描述

2、Windows转Linux

\qquad 本人使用的是Windows最近几年开发出来的WSL工具,可以在不使用虚拟机和双系统的情况下,在windows系统下直接运行Linux环境进行代码测试,对于不熟悉Linux环境或者Linux初学者比较友好。这东西可以直接对接windows的VS code,comfortable [doge].

THE END

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek24小时写作机器人,持续创作高质量文案

内容创作已成为企业、自媒体和创作者的核心竞争力。面对海量的内容需求&#xff0c;人工创作效率低、成本高、质量参差不齐等问题日益凸显。如何在有限时间内产出高质量内容&#xff1f;DeepSeek写作机器人&#xff0c;一款24小时持续创作的智能工具&#xff0c;为企业和个人提…

开源协议深度解析:理解MIT、GPL、Apache等常见许可证

目录 前言1. MIT协议&#xff1a;自由而宽松的开源许可1.1 MIT协议的主要特点1.2 MIT协议的适用场景 2. GPL协议&#xff1a;自由软件的捍卫者2.1 GPL协议的核心理念2.2 GPL协议的适用场景 3. Apache License 2.0&#xff1a;开源与专利保护的平衡3.1 Apache License 2.0的主要…

第四十四篇--Tesla P40+Janus-Pro-7B部署与测试

环境 系统&#xff1a;CentOS-7 CPU: 14C28T 显卡&#xff1a;Tesla P40 24G 驱动: 515 CUDA: 11.7 cuDNN: 8.9.2.26创建环境 conda create --name trans python3.10torch 2.6.0 transformers 4.48.3克隆项目 git clone https:/…

【前端】自己从头实现一个gpt聊天页面

预览 最小化功能点 主界面&#xff1a;侧边栏会话历史、聊天窗口发送和断开。侧边栏&#xff1a;展示会话列表&#xff0c;每个会话包含多条聊天记录&#xff0c; 通过localstorage本地储存和恢复&#xff0c;会话需要重命名和删除。聊天框&#xff1a;区分一下发送者和回答者…

【第13章:自监督学习与少样本学习—13.1 自监督学习最新进展与实现方法】

凌晨三点的实验室,博士生小王盯着屏幕里正在"自娱自乐"的神经网络——这个没有吃过一张标注图片的模型,正在通过旋转、拼图、填色等游戏任务,悄悄掌握着理解世界的秘诀。这种魔法般的修炼方式,正是当今AI领域最炙手可热的技术:自监督学习。 一、打破数据枷锁:自…

案例-06.部门管理-根据ID查询

一.根据ID查询-接口文档 二.根据ID查询-Controller层 package com.gjw.controller;/*** 部门管理Controller*/import com.gjw.anno.Log; import com.gjw.pojo.Dept; import com.gjw.pojo.Result; import com.gjw.service.DeptService; import com.gjw.service.impl.DeptServi…

【MySQL】使用 JDBC 连接数据库

文章目录 前言1. 认识 JDBC 1.1 概念1.2 好处 2. 使用 JDBC 2.1 安装数据驱动包2.2 把 jar 包导入到项目中2.3 代码编写2.4 测试结果 3. 代码优化4. 源码展示结语 前言 在 MySQL 系列中&#xff0c;我们介绍了很多内容&#xff0c;包括但不限于建库建表&#xff0c;增删查改等…

matlab模拟风场的随机脉动风

1、内容简介 matlab137-模拟风场的随机脉动风 可以交流、咨询、答疑 2、内容说明 略 模拟风场的随机脉动风&#xff0c;并进行相关的统计分析和计算&#xff0c;包括风速谱、空间相关性、自谱、互谱、以及POD&#xff08;Proper Orthogonal Decomposition&#xff09;分解等…

API 接口自动化

HTTP协议 - 白月黑羽 HTTP协议简介 如果客户端是浏览器&#xff0c;如何在chrome浏览器中查看 请求和响应的HTTP消息&#xff1f;按f12-》network 清除当前信息 响应的消息体在Response里看 点preview&#xff0c;可以看响应的消息体展开的格式 HTTP请求消息 请求头 reques…

(四)Axure学习图文教程

Axure中文学习网&#xff1a; Axure中文网 – 交互原型设计软件Axure RP中文正版支持 – 北京口耳相传科技有限公司 一、界面介绍 工具栏&#xff1a;主要操作功能。 站点地图&#xff1a;类似大纲界面&#xff0c;方便理清原型框架及逻辑关系。 元件库&#xff1a;调用所需…

2025年 Java 面试八股文

第一章-Java基础篇 1. Java中的基本数据类型有哪些&#xff1f;⭐ Java中有8种基本数据类型&#xff08;Primitive Types&#xff09;&#xff0c;分别是&#xff1a; byte&#xff1a;8位&#xff0c;-128 ~ 127short&#xff1a;16位&#xff0c;-32,768 ~ 32,767int&…

基于Docker-compose的禅道部署实践:自建MySQL与Redis集成及故障排查指南

基于Docker-compose的禅道部署实践&#xff1a;自建MySQL与Redis集成及故障排查指南 禅道镜像版本&#xff1a;easysoft/zentao:21.4 Redis版本&#xff1a;redis:6.2.0 Mysql版本&#xff1a;mysql:8.0.35 文章目录 **基于Docker-compose的禅道部署实践&#xff1a;自建MySQL与…

【Java八股文】01-Java基础面试篇

【Java八股文】01-Java基础面试篇 概念Java特点Java为什么跨平台JVM、JDK、JRE关系 面向对象什么是面向对象&#xff0c;什么是封装继承多态&#xff1f;多态体现的方面面向对象设计原则重载重写的区别抽象类和实体类区别Java抽象类和接口的区别抽象类可以被实例化吗 深拷贝浅拷…

基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录

目录 一. 概要 二. 技术栈 三. 系统功能设计 3.1 功能模块 3.2 数据表设计 四. 具体实现 4.1 Qt 服务端 4.1.1 初始化 WebSocket 服务器 4.1.2 用户管理界面 4.2 微信小程序端 4.2.1 注册功能 4.2.2 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…

【STM32】舵机SG90

1.舵机原理 舵机内部有一个电位器&#xff0c;当转轴随电机旋转&#xff0c;电位器的电压会发生改变&#xff0c;电压会带动转一定的角度&#xff0c;舵机中的控制板就会电位器输出的电压所代表的角度&#xff0c;与输入的PWM所代表的角度进行比较&#xff0c;从而得出一个旋转…

PostgreSQL:备库的延迟问题处理步骤

目录标题 1. 查看主备状态计算方式&#xff1a;实际情况&#xff1a;举个例子&#xff1a; 2. 查看历史状态3. 分析日志文件4. 查看数据库层面的复制状态5. 检查活动事务6. 检查系统资源7. 检查网络状况8. 检查复制槽状态9. 检查未提交的两阶段事务 要排查 PostgreSQL 备库的延…

【重构谷粒商城】06:Maven快速入门教程

重构谷粒商城06——Maven快速入门教程 前言&#xff1a;这个系列将使用最前沿的cursor作为辅助编程工具&#xff0c;来快速开发一些基础的编程项目。目的是为了在真实项目中&#xff0c;帮助初级程序员快速进阶&#xff0c;以最快的速度&#xff0c;效率&#xff0c;快速进阶到…

【Python】错误异常

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Python 文章目录 1. 错误和异常的概念1.1 错误1.2 异常 2. 常见的内置异常类型2.1 ZeroDivisionError2.2 IndexError2.3 KeyError2.4 TypeError 3. 异常处理机制3.1 try-except 语句3.2 try-except-else 语句3.3 try-except-fin…

Win11 远程 连接 Ubuntu20.04(局域网)

Win11 远程 连接 Ubuntu20.04(局域网&#xff09; 0. Ubuntu 开启共享1. Ubuntu系统中安装RDP服务器2.windows中连接使用方式1&#xff1a;远程桌面连接(winr: mstsc)方式2&#xff1a;mobaXterm 3 问题远程连接后出现黑屏 参考文献: 0. Ubuntu 开启共享 在ubunt设置中&#x…

visutal studio 2022使用qcustomplot基础教程

编译 下载&#xff0c;2.1.1版支持到Qt6.4 。 拷贝qcustomplot.h和qcustomplot.cpp到项目源目录&#xff08;Qt project&#xff09;。 在msvc中将它俩加入项目中。 使用Qt6.8&#xff0c;需要修改两处代码&#xff1a; L6779 # if QT_VERSION > QT_VERSION_CHECK(5, 2, …