Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Оптимизация2

.docx
Скачиваний:
0
Добавлен:
12.04.2025
Размер:
123.82 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Старший преподаватель

Б.К.Акопян

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №2

НАХОЖДЕНИЕ ЭКСТРЕМУМА ФУНКЦИИ В СРЕДЕ МS EXCEL

по курсу: ПРИКЛАДНЫЕ МЕТОДЫ ОТПТИМИЗАЦИИ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ гр. №

4116

подпись, дата

инициалы, фамилия

Санкт-Петербург 2024

Цель работы: изучение возможностей среды Excel в связи с задачей оптимизации решения уравнения с учетом наложенных ограничений, приобретение практических навыков решения задач оптимизации в среде Excel.

Вариант 4:

Рисунок 1- Функция и условия минимизации и максимизации

Ход работы:

В среде Excel найдены переменные, которые обращают в минимум целевую функцию с учетом заданных условий (Рисунок 2).

Рисунок 2- Нахождение переменных для минимизации

Затем найдены переменные для максимизации функции (Рисунок 3).

Рисунок 3- Нахождение переменных для максимизации

Вывод: изучены возможности среды Excel, связанные с задачей оптимизации решения уравнения с учетом наложенных ограничений, приобретены практические навыки решения задач оптимизации в среде Excel.

import java.util.*; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String sequence = scan.nextLine(); String chars = scan.nextLine(); int k = scan.nextInt(); Set<Character> charsSet = new HashSet<>(); for (char ch : chars.toCharArray()) { charsSet.add(ch); } int n = sequence.length(); String result = "-1"; for (int i = 0; i < n; i++) { for (int j = i + 1; j <= n && j - i <= k; j++) { String substring = sequence.substring(i, j); if (containsChars(substring, charsSet)) { if (result.equals("-1") || i > sequence.indexOf(result) || // начинается правее (i == sequence.indexOf(result) && substring.length() > result.length())) { // длина больше result = substring; } } } } System.out.println(result); } private static boolean containsChars(String substring, Set<Character> charsSet) { Set<Character> charsSub = new HashSet<>(); for (char ch : substring.toCharArray()) { charsSub.add(ch); } return charsSub.containsAll(charsSet); } }

import java.util.*; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); long l = scan.nextLong(); long r = scan.nextLong(); Set<Integer> pr = generatePr(100); int count = 0; for (long i = l; i <= r; i++) { if (composite(i)) { int del = countDel(i); if (pr.contains(del)) { count++; } } } System.out.println(count); } private static int countDel(long n) { int count = 0; for (long i = 1; i * i <= n; i++) { if (n % i == 0) { count++; if (i != n / i) { count++; } } } return count; } private static boolean composite(long n) { if (n <= 1) return false; if (n <= 3) return false; if (n % 2 == 0 || n % 3 == 0) return true; for (long i = 5; i * i <= n; i += 6) { if (n % i == 0 || n % (i + 2) == 0) return true; } return false; } private static Set<Integer> generatePr(int maxNumber) { boolean[] isPrime = new boolean[maxNumber + 1]; Arrays.fill(isPrime, true); isPrime[0] = isPrime[1] = false; for (int i = 2; i * i <= maxNumber; i++) { if (isPrime[i]) { for (int j = i * i; j <= maxNumber; j += i) { isPrime[j] = false; } } } Set<Integer> prost = new HashSet<>(); for (int i = 2; i <= maxNumber; i++) { if (isPrime[i]) { prost.add(i); } } return prost; } }

import java.util.*; import java.text.*; public class Main { public static void main(String[] args) throws ParseException { Scanner scan = new Scanner(System.in); String startTimeStr = scan.nextLine(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); Date startTime = sdf.parse(startTimeStr); int n = scan.nextInt(); scan.nextLine(); Map<String, TeamInfo> teams = new TreeMap<>(); for (int i = 0; i < n; i++) { String line = scan.nextLine(); String[] parts = line.split(" "); String teamName = parts[0].substring(1, parts[0].length() - 1); // минус кавычки String requestTimeStr = parts[1]; String serverId = parts[2]; String result = parts[3]; Date requestTime = sdf.parse(requestTimeStr); long elapsedTime = (requestTime.getTime() - startTime.getTime()) / 60000; TeamInfo team = teams.getOrDefault(teamName, new TeamInfo()); teams.putIfAbsent(teamName, team); if (result.equals("ACCESSED")) { team.addAccessedServer(serverId, elapsedTime); } else if (result.equals("DENIED") || result.equals("FORBIDEN")) { team.addFailedAttempt(serverId); } } List<TeamResult> results = new ArrayList<>(); for (Map.Entry<String, TeamInfo> entry : teams.entrySet()) { String teamName = entry.getKey(); TeamInfo info = entry.getValue(); results.add(new TeamResult(teamName, info.getServerCount(), info.getResTime())); } // сортировка results.sort((a, b) -> { if (b.accessedServers != a.accessedServers) { return Integer.compare(b.accessedServers, a.accessedServers); } else if (a.penaltyTime != b.penaltyTime) { return Integer.compare(a.penaltyTime, b.penaltyTime); } else { return a.teamName.compareTo(b.teamName); } }); for (int i = 0; i < results.size(); i++) { TeamResult result = results.get(i); System.out.println((i + 1) + " \"" + result.teamName + "\" " + result.accessedServers + " " + result.penaltyTime); } } static class TeamInfo { private final Set<String> accessedServers = new HashSet<>(); private final Map<String, Integer> failedAttempts = new HashMap<>(); private int resTime = 0; void addAccessedServer(String serverId, long elapsedTime) { if (accessedServers.contains(serverId)) { return; // сервер уже взломан } accessedServers.add(serverId); resTime += elapsedTime; } void addFailedAttempt(String serverId) { failedAttempts.put(serverId, failedAttempts.getOrDefault(serverId, 0) + 1); } int getServerCount() { return accessedServers.size(); } int getResTime() { for (int attempts : failedAttempts.values()) { resTime += attempts * 20; } return resTime; } } static class TeamResult { String teamName; int accessedServers; int penaltyTime; TeamResult(String teamName, int accessedServers, int penaltyTime) { this.teamName = teamName; this.accessedServers = accessedServers; this.penaltyTime = penaltyTime; } } }

Соседние файлы в предмете Прикладные методы оптимизации