Skip to content

Commit

Permalink
Add content to home page
Browse files Browse the repository at this point in the history
  • Loading branch information
Alejandro-FA committed Nov 6, 2024
1 parent 798d3aa commit ac9e4b1
Show file tree
Hide file tree
Showing 21 changed files with 316 additions and 226 deletions.
3 changes: 3 additions & 0 deletions assets/content/en/about_me.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
I recently graduated in _**Computer Engineering**_, where I discovered my passion for _**Programming**_ and _**Artificial Intelligence**_. I am looking for opportunities to deepen my knowledge of these topics and apply it to real-world applications. In my free time, you will find me with my friends, doing sports or playing video games.

If you are interested in my work, I invite you to check my [resume](/cv), my [projects](/projects), or the [research](/research) I have done.
36 changes: 36 additions & 0 deletions assets/content/en/parallel_bfgp.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,39 @@
#### Abstract

In recent years, there has been renewed interest in closing the performance gap between state-of-the-art planning solvers and generalized planning (GP), a research area of AI that studies the automated synthesis of algorithmic-like solutions capable of solving multiple classical planning instances. One of the current advancements has been the introduction of Best-First Generalized Planning (BFGP), a GP algorithm based on a novel solution space that can be explored with heuristic search, one of the foundations of modern planners. This paper evaluates the application of parallel search techniques to BFGP, another critical component in closing the performance gap. We first discuss why BFGP is well suited for parallelization and some of its differentiating characteristics from classical planners. Then, we propose two simple shared-memory parallel strategies with good scaling with the number of cores.

#### References

- _[1]_ D. E. Baz, B. Fakih, R. S. Nigenda, and V. Boyer. Parallel best-first
search algorithms for planning problems on multi-core processors. The
Journal of supercomputing, 78(3):3122–3151, 7 2021.

- _[2]_ B. Bonet and H. Geffner. Planning as heuristic search. Artificial Intelligence, 129(1):5–33, 2001.

- _[3]_ M. Ghallab, D. Nau, and P. Traverso. Automated Planning and Acting. Cambridge University Press, 2016.

- _[4]_ P. Haslum, N. Lipovetzky, D. Magazzeni, and C. Muise. An introduction to the planning domain definition language, volume 13. Springer, 2019.

- _[5]_ Y. Hu and G. De Giacomo. Generalized planning: Synthesizing plans that work for multiple environments. In IJCAI, volume 22, page 918, 2011.

- _[6]_ S. Jiménez, J. Segovia-Aguas, and A. Jonsson. A review of generalized planning. The Knowledge Engineering Review, 34:e5, 2019.

- _[7]_ A. Kishimoto, A. Fukunaga, and A. Botea. Scalable, parallel best-first search for optimal sequential planning. ICAPS, 19(1):201–208, Oct. 2009.

- _[8]_ R. E. Korf, W. Zhang, I. Thayer, and H. Hohwald. Frontier search. Journal of the ACM (JACM), 52(5):715–748, 2005.

- _[9]_ R. Kuroiwa and A. Fukunaga. On the Pathological Search Behavior of Distributed Greedy Best-First Search. ICAPS, 29:255–263, 5 2021.

- _[10]_ J. Segovia Aguas, S. Jimenez Celorrio, and A. Jonsson. Generalized planning with procedural domain control knowledge. ICAPS, 26(1): 285–293, Mar. 2016.

- _[11]_ J. Segovia-Aguas, S. Jiménez, and A. Jonsson. Generalized planning as heuristic search. ICAPS, 31(1):569–577, May 2021.

- _[12]_ J. Segovia-Aguas, Y. E-Martín, and S. Jiménez. Representation and Synthesis of C++ Programs for Generalized Planning, 2022.

- _[13]_ J. Segovia-Aguas, S. Jiménez, and A. Jonsson. Generalized Planning as Heuristic Search: A new planning search-space that leverages pointers over objects. Artificial Intelligence, page 104097, 2 2024.

- _[14]_ S. Srivastava. Foundations and applications of generalized planning. AI Communications, 24(4):349–351, 2011.

- _[15]_ S. Srivastava, N. Immerman, and S. Zilberstein. A new representation and associated algorithms for generalized planning. Artificial Intelligence, 175(2):615–647, 2011.

- _[16]_ A. Taitler, R. Alford, J. Espasa, G. Behnke, D. Fišer, M. Gimelfarb, F. Pommerening, S. Sanner, E. Scala, D. Schreiber, et al. The 2023 international planning competition. AI Magazine, pages 453–460, 2024
3 changes: 3 additions & 0 deletions assets/content/es/about_me.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
I recently graduated in _**Computer Engineering**_, where I discovered my passion for _**Programming**_ and _**Artificial Intelligence**_. I am looking for opportunities to deepen my knowledge of these topics and apply it to real-world applications. In my free time, you will find me with my friends, doing sports or playing video games.

If you are interested in my work, I invite you to check my [resume](/cv), my [projects](/projects), or the [research](/research) I have done.
36 changes: 36 additions & 0 deletions assets/content/es/parallel_bfgp.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,39 @@
#### Abstract

In recent years, there has been renewed interest in closing the performance gap between state-of-the-art planning solvers and generalized planning (GP), a research area of AI that studies the automated synthesis of algorithmic-like solutions capable of solving multiple classical planning instances. One of the current advancements has been the introduction of Best-First Generalized Planning (BFGP), a GP algorithm based on a novel solution space that can be explored with heuristic search, one of the foundations of modern planners. This paper evaluates the application of parallel search techniques to BFGP, another critical component in closing the performance gap. We first discuss why BFGP is well suited for parallelization and some of its differentiating characteristics from classical planners. Then, we propose two simple shared-memory parallel strategies with good scaling with the number of cores.

#### References

- _[1]_ D. E. Baz, B. Fakih, R. S. Nigenda, and V. Boyer. Parallel best-first
search algorithms for planning problems on multi-core processors. The
Journal of supercomputing, 78(3):3122–3151, 7 2021.

- _[2]_ B. Bonet and H. Geffner. Planning as heuristic search. Artificial Intelligence, 129(1):5–33, 2001.

- _[3]_ M. Ghallab, D. Nau, and P. Traverso. Automated Planning and Acting. Cambridge University Press, 2016.

- _[4]_ P. Haslum, N. Lipovetzky, D. Magazzeni, and C. Muise. An introduction to the planning domain definition language, volume 13. Springer, 2019.

- _[5]_ Y. Hu and G. De Giacomo. Generalized planning: Synthesizing plans that work for multiple environments. In IJCAI, volume 22, page 918, 2011.

- _[6]_ S. Jiménez, J. Segovia-Aguas, and A. Jonsson. A review of generalized planning. The Knowledge Engineering Review, 34:e5, 2019.

- _[7]_ A. Kishimoto, A. Fukunaga, and A. Botea. Scalable, parallel best-first search for optimal sequential planning. ICAPS, 19(1):201–208, Oct. 2009.

- _[8]_ R. E. Korf, W. Zhang, I. Thayer, and H. Hohwald. Frontier search. Journal of the ACM (JACM), 52(5):715–748, 2005.

- _[9]_ R. Kuroiwa and A. Fukunaga. On the Pathological Search Behavior of Distributed Greedy Best-First Search. ICAPS, 29:255–263, 5 2021.

- _[10]_ J. Segovia Aguas, S. Jimenez Celorrio, and A. Jonsson. Generalized planning with procedural domain control knowledge. ICAPS, 26(1): 285–293, Mar. 2016.

- _[11]_ J. Segovia-Aguas, S. Jiménez, and A. Jonsson. Generalized planning as heuristic search. ICAPS, 31(1):569–577, May 2021.

- _[12]_ J. Segovia-Aguas, Y. E-Martín, and S. Jiménez. Representation and Synthesis of C++ Programs for Generalized Planning, 2022.

- _[13]_ J. Segovia-Aguas, S. Jiménez, and A. Jonsson. Generalized Planning as Heuristic Search: A new planning search-space that leverages pointers over objects. Artificial Intelligence, page 104097, 2 2024.

- _[14]_ S. Srivastava. Foundations and applications of generalized planning. AI Communications, 24(4):349–351, 2011.

- _[15]_ S. Srivastava, N. Immerman, and S. Zilberstein. A new representation and associated algorithms for generalized planning. Artificial Intelligence, 175(2):615–647, 2011.

- _[16]_ A. Taitler, R. Alford, J. Espasa, G. Behnke, D. Fišer, M. Gimelfarb, F. Pommerening, S. Sanner, E. Scala, D. Schreiber, et al. The 2023 international planning competition. AI Magazine, pages 453–460, 2024
Binary file added assets/images/portrait.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions lib/data/home_data.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
const aboutMe = 'about_me.md';
2 changes: 1 addition & 1 deletion lib/data/research_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const researchEntries = [
pdfLinks: [
LinkData(
url: 'https://repositori.upf.edu/handle/10230/61315',
text: 'Thesis',
text: 'Full Thesis',
),
LinkData(
url: 'https://arxiv.org/abs/2407.21485',
Expand Down
7 changes: 7 additions & 0 deletions lib/navigation/router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart';

import '../controllers/content_controller.dart';
import '../data/cv_data.dart';
import '../data/home_data.dart';
import '../data/research_data.dart';
import 'route_guards.dart';
import 'router.gr.dart';
Expand Down Expand Up @@ -34,6 +35,12 @@ class AppRouter extends RootStackRouter {
page: HomeRoute.page,
path: '/',
initial: true,
guards: [
CacheGuard(
cacheController: cacheController,
files: [aboutMe],
),
],
),
AutoRoute(
page: ProjectsRoute.page,
Expand Down
19 changes: 12 additions & 7 deletions lib/pages/cv.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';

import '../data/cv_data.dart';
import '../services/storage_service.dart';
import '../theme/material_window_class.dart';
import '../theme/window_class.dart';
import '../widgets/cv_timeline_event.dart';
import '../widgets/page_scaffold.dart';
import '../widgets/timeline.dart';
Expand All @@ -20,11 +20,6 @@ class CVPage extends StatelessWidget {
Widget build(BuildContext context) {
final theme = Theme.of(context);
final textTheme = theme.textTheme;
final screenWidth = MediaQuery.of(context).size.width;
final double padding = max(
MaterialWindowClass.of(context) <= MaterialWindowClass.medium ? 15 : 50,
(screenWidth - MaterialWindowClass.large.minDP) / 2,
);

return PageScaffold(
title: 'Curriculum Vitae | Alejandro Fernández Alburquerque',
Expand All @@ -33,7 +28,7 @@ class CVPage extends StatelessWidget {
SliverPadding(
padding: EdgeInsets.symmetric(
vertical: 50,
horizontal: padding,
horizontal: _getPadding(context),
),
sliver: SliverList.list(
children: [
Expand Down Expand Up @@ -72,6 +67,16 @@ class CVPage extends StatelessWidget {
],
);
}

static double _getPadding(BuildContext context) {
final screenWidth = MediaQuery.of(context).size.width;
return switch (WindowClass.of(context)) {
WindowClass.compact => 15,
WindowClass.medium => 30,
WindowClass.expanded => 50,
_ => max(50, (screenWidth - WindowClass.large.minDP) * 0.5),
};
}
}

class _DownloadCVButton extends ConsumerWidget {
Expand Down
135 changes: 99 additions & 36 deletions lib/pages/home.dart
Original file line number Diff line number Diff line change
@@ -1,56 +1,119 @@
import 'dart:math';

import 'package:auto_route/auto_route.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';

import '../data/home_data.dart';
import '../theme/window_class.dart';
import '../widgets/markdown_content.dart';
import '../widgets/page_scaffold.dart';

@RoutePage()
class HomePage extends StatelessWidget {
const HomePage({super.key});

@override
Widget build(BuildContext context) => const PageScaffold(
title: 'Home | Alejandro Fernández Alburquerque',
socialMediaRail: true,
slivers: [
SliverToBoxAdapter(child: HeroSection()),
],
);
}

class HeroSection extends StatelessWidget {
const HeroSection({super.key});

@override
Widget build(BuildContext context) {
final colorScheme = Theme.of(context).colorScheme;
final textTheme = Theme.of(context).textTheme;

return Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.transparent, colorScheme.primary.withOpacity(0.05)],
),
),
padding: EdgeInsets.symmetric(horizontal: _getPadding(context)),
child: WindowClass.of(context) >= WindowClass.large
? const Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Flexible(flex: 10, child: _Greeting()),
SizedBox(width: 20),
Flexible(flex: 10, child: _Portrait()),
],
)
: const Column(
children: [
_Greeting(),
_Portrait(),
],
),
);
}

static double _getPadding(BuildContext context) {
final screenWidth = MediaQuery.of(context).size.width;
return switch (WindowClass.of(context)) {
WindowClass.compact => 30,
WindowClass.medium => 50,
WindowClass.expanded => 100,
_ => max(100, (screenWidth - WindowClass.expanded.minDP) / 5),
};
}
}

return PageScaffold(
title: 'Home | Alejandro Fernández Alburquerque',
socialMediaRail: true,
slivers: [
SliverFillRemaining(
hasScrollBody: true,
child: Padding(
padding: EdgeInsets.all(screenWidth * 0.1),
child: Center(
child: RichText(
textAlign: TextAlign.center,
text: TextSpan(
style: textTheme.displaySmall,
children: [
const TextSpan(
text: 'Work in progress. Take a look at my ',
),
TextSpan(
text: 'Curriculum Vitae',
style: TextStyle(
color: colorScheme.secondary,
decoration: TextDecoration.underline,
decorationColor: colorScheme.secondary,
),
recognizer: TapGestureRecognizer()
..onTap = () async => context.navigateNamedTo('/cv'),
),
const TextSpan(
text: ' in the meantime.',
),
],
),
class _Portrait extends StatelessWidget {
const _Portrait();

@override
Widget build(BuildContext context) => Padding(
padding: const EdgeInsets.only(top: 50),
child: Image.asset('assets/images/portrait.png'),
);
}

class _Greeting extends StatelessWidget {
const _Greeting();

@override
Widget build(BuildContext context) {
final textTheme = Theme.of(context).textTheme;
final colorScheme = Theme.of(context).colorScheme;

return Padding(
padding: const EdgeInsets.only(top: 50, bottom: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Hello, I’m ',
style: textTheme.displayMedium,
),
Text(
'Alejandro Fernández',
style: textTheme.displayLarge?.copyWith(
fontWeight: FontWeight.bold,
color: colorScheme.primary,
),
),
const SizedBox(height: 20),
MarkdownContent(
file: aboutMe,
styleSheet: MarkdownTheme.of(context).copyWith(
p: textTheme.titleLarge?.copyWith(
fontFamily: textTheme.bodyLarge?.fontFamily,
height: 1.5,
),
),
),
),
],
],
),
);
}
}
Loading

0 comments on commit ac9e4b1

Please sign in to comment.